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

I doubt many people reuse the same symbol name in different sigil/types.

I do this all the time because if I have an array of @stuff and a hash of the same %stuff I think they should both be called stuff. If I need a variable about stuff I'll call that $stuff too.

it's considered bad style to reuse the same symbol for different types

Considered by who?

if we want to pass an @arr to a function we need to explicitly reference it \@arr and inside the function we always need to explicitly dereference it.

We don't need to do that at all, unless @INC is huge:

perl -le 'sub INC { print for @_ } INC(@INC)'
  • Comment on Re^3: Implicit references? module -> feature -> pragma -> "Perl8" ?
  • Download Code

Replies are listed 'Best First'.
Re^4: Implicit references? module -> feature -> pragma -> "Perl8" ?
by LanX (Saint) on May 12, 2026 at 22:59 UTC
    > Considered by who?

    Various style guides, most prominently Perl Best Practices comes to mind where IIRC arrays need to have plural names, while scalars are singular.

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

      for my $sheep (@sheep) { $sheep->say ('Baa!') };

      Which rule wins here?


      🦛

        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

Re^4: Implicit references? module -> feature -> pragma -> "Perl8" ?
by Anonymous Monk on May 12, 2026 at 22:10 UTC
    if we want to pass an @arr to a function we need to explicitly reference it \@arr and inside the function we always need to explicitly dereference it.

    Correct and sorry I misunderstood...