For the same reason that this also issues the warning:
@array = qw[ foo bar qux ];; print @{ array }[ 0 ];; Scalar value @{ array }[ 0 ] better written as ${ array }[ 0 ] at foo
But these do not:
$name = 'array';; print @{ $name }[ 0 ];; foo $ref = \@array;; print @{ $ref }[ 0 ];; foo
As this scrunched up deparse output shows, the extra level of indirection means that the code goes through a different path, and the warning has never been attached to that other path:
9 <;> nextstate(...)v ->a 9 <;> nextstate(...) v ->a g <@> print vK ->h g <@> print vK ->h a <0> pushmark s ->b a <0> pushmark s ->b f <@> aslice lK ->g f <@> aslice lK ->g b <0> pushmark s ->c b <0> pushmark s ->c c <$> const[IV 0] s ->d c <$> const[IV 0] s ->d e <1> rv2av[t5] sKR/1 ->f e <1> rv2av[t4] sKR/1 ->f d <#> gv[*array] s ->e - <@> scope sK ->e -e syntax OK - <0> ex-nextstate v ->d d <$> const[PV "array"] s ->e -e syntax OK
In reply to Re^5: accessing array elements using a reference
by BrowserUk
in thread accessing array elements using a reference
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |