Supposing we are talking about activated strictures and prior mine @sheep
What I expected is a warning for the for loop
"my" variable $sheep masks earlier declaration in same scope
Furthermore use warnings FATAL => "shadow"; should lead to a compilation error:
Compilation exited abnormally with code 255
All of this is easily avoided by using plural my/mine @sheeps like suggested in PBP.
NOW actually ...
... in your example, there is no conflict because of the new nested lexical scope
(I simplified the class away, because it doesn't add much)
use strict;
use warnings FATAL => "shadow";
use feature 'say';
#use diagnostics;
# - mine @sheep = (1,2,3);
my @sheep;
my $sheep = \@sheep;
@sheep = (1,2,3);
# ---
for my $sheep (@sheep) { say $sheep };
say @$sheep;
perl /home/lanx/perl/pm/sheep.pl
1
2
3
123
I'd say, since @sheep "survives" into the nested scope, so should the array reference $sheep too.
Hence the warning must be emitted.
NB: for my $sheep (@$sheep) { say $sheep }; is similarly working code in current Perl (and bad style in my book)
|