Perl array splicing syntax -
why third print fail?
my @a = (0,1,2,3); print @a[-@a..-2]; # works print @a[0..2]; # works print @a[0..-2]; # prints nothing it's not clear me meaning of -@a used in @a[-@a..-2] statement. special syntax? special syntax provide (if @ all) in addition $#a instance? sort of sugar (which curious shorter single character) symbol array used in subindex means "length of array"?
the 3rd print prints nothing because, according perldoc perlop:
if left value greater right value returns empty list.
see perldoc b::deparse:
$ perl -mo=deparse code.pl my(@a) = (0, 1, 2, 3); print @a[-@a .. -2]; print @a[0..2]; print @a[()]; i believe print @a[-@a..-2]; "works" because @a[-4 .. -2]. according perldoc perldata:
a negative subscript retrieves value end.
so, 3 @ index -1, 2 @ index -2, 1 @ index -3 , 0 @ index -4.
Comments
Post a Comment