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 |