http://www.perlmonks.org?node_id=171177

MeowChow has asked for the wisdom of the Perl Monks concerning the following question:

Wherefore does the following code work?
  
@l = 0..10; %h = (a => 1, b => 2); print @l->[4]; # prints 4 print %h->{b}; # prints 2
My reading of perlop has me convinced that this is an unintended syntactic feature.
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print

Replies are listed 'Best First'.
Re: Arrow Operator Oddment
by Abigail-II (Bishop) on Jun 03, 2002 at 09:42 UTC
    My reading of perlop has me convinced that this is an unintended syntactic feature.

    And that's exactly what it is. When using the arrow, Perl will see whatever is left of it as a reference. Including if you have something like @l or %h.

    Note that you will get the warning
    Using an array as a reference is deprecated
    in Perl 5.8.0.

    Abigail

      Deprecated, eh? Somehow I don't get the impression that it was ever precated to begin with... :-)
         MeowChow                                   
                     s aamecha.s a..a\u$&owag.print
        Can you explain that a bit for those less enlightened monks?

        I'm a bit baffled. I don't see what the problem is.
        --

        ($_='jjjuuusssttt annootthheer pppeeerrrlll haaaccckkeer')=~y/a-z//s;print;