Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^4: Print HTML form to file using CGI.pm save method

by SerZKO (Beadle)
on Aug 04, 2012 at 10:05 UTC ( #985417=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Print HTML form to file using CGI.pm save method
in thread Print HTML form to file using CGI.pm save method

But isn't it so that when you return a variable from a subroutine you return it to main scope only ? I've tried to call it from another subroutine and got error message (global symbol $Extnr needs explicit package name). So it seems that I either need to declare those in main scope or to use an intermediate variable to transfer the value of $Extnr through different scopes. Or... ?


Comment on Re^4: Print HTML form to file using CGI.pm save method
Re^5: Print HTML form to file using CGI.pm save method
by Anonymous Monk on Aug 04, 2012 at 10:22 UTC
    sub kundNytt { my ($trans) = @_; # do something with $trans my $somevar = 88; return $somevar; } my $result; $result = kundNytt(42); print $result; # prints '88'
Re^5: Print HTML form to file using CGI.pm save method
by Anonymous Monk on Aug 04, 2012 at 10:36 UTC

    But isn't it so that when you return a variable from a subroutine you return it to main scope only ?

    No, you return it to the caller

    Consider

    sub sparaData { open (KOF, ">$konfil") or die "Kan inte \xF6ppna filen $konfil"; flock (KOF, 2) or die "Kan inte l\xE5sa filen $konfil"; $qry-> save (*KOF) or die "Kan inte spara filen $konfil"; close KOF; $size = -s $konfil; return; }

    Its better written as

    sub sparaData { my( $konfil, $qry ) = @_; open my($KOF), ">$konfil" or die "Kan inte \xF6ppna filen $konfil +"; flock $KOF, 2 or die "Kan inte l\xE5sa filen $konfil"; $qry-> save ( $KOF) or die "Kan inte spara filen $konfil"; close $KOF; my $size = -s $konfil; return $size; }

    And use it as

    my $qry = CGI->new; my $number = sparaData( "blah/blah/blah.data", $qry );
    $qry and $qry are not the same variable, $size and $number are not the same variable -- they each respectively have the same value, but they live in different scopes

    If you changed it to

    my $roshambo = CGI->new; my $size = sparaData( "blah/blah/blah.data", $roshambo );
    the new code would still work because you don't depend on global vars

    See Tutorials: Variable Scoping in Perl: the basics, Coping with Scoping , Mini-Tutorial: Perl's Memory Management, Lexical scoping like a fox

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://985417]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (7)
As of 2014-12-25 18:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (161 votes), past polls