In the examples below, the variable the declaration of $b without my, local or our works like a global variable. I know this issue will be solved if strictures and warnings are enabled(One would be forced to declare a scope specifier) but without that, the expected behaviour should be that unless you explicitly declare it as 'our' the scope of the variable should end immediately after the curly brace
Shouldn't the default scope be local?
case 1:
$ perl -e 'use Data::Dumper;{my @a=(0..10);$b=\@a} print Dumper $b' $VAR1 = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
case 2:
$ perl -e 'use Data::Dumper;{my @a=(0..10);my $b=\@a} print Dumper $b' $VAR1 = undef;
case 3:
$ perl -e 'use Data::Dumper;{my @a=(0..10);local $b=\@a} print Dumper +$b' $VAR1 = undef;
case 4:
$ perl -e 'use Data::Dumper;{my @a=(0..10);our $b=\@a} print Dumper $b +' $VAR1 = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
In reply to More Scope related questions. by curiousmonk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |