Joshua A. Gage wrote:
Hi,
I'm having a bit of trouble with using some local scope variables. I have a function where I want to define a variable, then use that variable in a sub function. That sounds like the text book definition for when to use a local scope variable. Below is the test script that I'm using.
I'm using the 'use strict' declaration as all the books I've read (O'Reilly's) say that's a Good Thing to do.
Can someone offer some insight as to why when I declare $a it's ok, but declaring $aa give me an error?
I'm using Active State's Perl v5.8.3 build 809 for Windows.
Thanks for any help - Josh [EMAIL PROTECTED]
--------------------------------------------------------------------------------------------
use strict;
test1();
sub test1 { local $a = 1; local $aa = 2; test2(); }
sub test2 { print "a = $a\n"; print "aa = $aa\n"; }
# Global symbol "$aa" requires explicit package name at C:\projects\Tracing\test.pl line 8.
# Global symbol "$aa" requires explicit package name at C:\projects\Tracing\test.pl line 15.
# Execution of C:\projects\Tracing\test.pl aborted due to compilation errors.
hello,
use my extract from perldoc -f my : A "my" declares the listed variables to be local (lexically) to the enclosing block, file, or "eval".
In most cases you would be right, but in this case it appears that the OP understands what 'local' does, as he is using it inside of an embedded function. Do I like that, no, but it is a "correct" usage of 'local'. Your suggestion of using 'my' changes how the variables must be used so is not equivalent without suggesting the interface to 'test2' changes...
sub test1 { my $aa = 1; my $aaa = 2; test2($aa, $aaa); }
sub test2 { my ($bb, $bbb) = @_; print "aa = $bb\n"; print "aaa = $bbb\n"; }
Is the above better, in the court of readability and encapsulation, yes, in the court of elegance, maybe not...
http://danconia.org
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>