in reply to I'm looking for some 'heavy magic'

@$ref->[0]

This is actually illegal Perl code, but works mysteriously anyway. It's a known bug, described in perldelta. It's applicable for hashes too.

Replies are listed 'Best First'.
Re: Re: I'm looking for some 'heavy magic'
by herveus (Prior) on Jan 24, 2002 at 22:04 UTC
    Howdy!

    Not quite.

    The actual examples in perldelta are:

    @x->[2] scalar(@x)->[2]
    "@$ref->[0]" can be parsed as @{$ref->[0]}, where $ref refers to an array whose first element is an arrayref.

    yours,
    Michael

      Nuh-uh!

      @$ref->[0] can be parsed as @{$ref->[0]}

      That's not what's happening.

      From perlref:
      Because of being able to omit the curlies for the simple case of $$x, people often make the mistake of viewing the dereferencing symbols as proper operators, and wonder about their precedence.

      Example code:
      use strict; my $r = [qw/foo bar/]; print $r->[0]; # 'foo' print @$r->[0]; # 'foo', due to bug. print @{$r->[0]}; # Can't use string ("foo") as an ARRAY ref...
      I bet that you've several times have heard "use references as variable names". That is a good way to describe references, and it works here too. Having $r = \@x, @$r->[0] will be the same as @x->[0]. So it is indeed the same issue as in perldelta.