in reply to Re^5: Implicit references? module -> feature -> pragma -> "Perl8" ?
in thread Implicit references? module -> feature -> pragma -> "Perl8" ?

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)

Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^7: Implicit references? module -> feature -> pragma -> "Perl8" ?
by LanX (Saint) on May 13, 2026 at 13:36 UTC
    Another POV would be to allow shadowing of both variants inside a nested scope. °

    Cases with recursive structures or functions may profit from this.

    (But the elements of the array would be nested arrays, not objects)

    hence

    { mine @sheeps = ( [ qw(Shaun Shirley Timmy) ], # cartoons [ qw(Dolly Daisy Debbie) ] # clones ); for mine $sheeps (@sheeps) { # mine! say @sheeps; # := @$sheeps } }

    prints

    ShaunShirleyTimmy DollyDaisyDebbie

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

    °) NB this is consistent with the proposed semantics in the OP.