John Deighan wrote:
>> OK, then, consider this program. Notice that there's a global $i which
>> has the value 5. Now, when func() is called, if the "my $i" did not
>> create a new lexically scoped variable, then the print line would print
>> "i = 5". But it doesn't - obviously because the lexical variable was
>> created, but is undefined because $b is false.
>>
>> our $i = 5;
>> our $b = 0;
>>
>> func();
>>
>> sub func {
>>
>> my $i = 3 if $b;
>> print("i = $i\n");
>> }
Here's a modification of that that illustrates the problem:
$i = 5;
func();
print("1: i = $i\n");
func();
print("2: i = $i\n");
sub func {
print("before my: i = $i\n");
my($i) = 3 if undef;
print("after my: i = $i\n");
$i = 7;
print("after =: i = $i\n");
}
################
before my: i = 5
after my: i =
after =: i = 7
1: i = 5
before my: i = 5
after my: i = 7
after =: i = 7
2: i = 5
So u see, it's after u utilize the my twice that things veer off into the
twilight zone. I believe this is another side effect of the not fully
developed closure syntax. The my statement is only partially doing it's
thing. The $i=7 value should have gone out of scope when func returned but
it didn't, it stayed alive after the indeterminate my. U have this thing
for excessivly convoluted code. ;)
--
REMEMBER THE WORLD TRADE CENTER ---=< WTC 911 >=--
"...ne cede malis"
00000100
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs