Further to Cristoforo's reply above: Ppeoc: Indeed, the @shapes array (from the OP) is an array, and an array slice works on any array:
Furthermore, the slice list does not have to be a range, but is a list of any indices, including repeats, in any order.c:\@Work\Perl\monks>perl -wMstrict -le "my @shapes = ( [qw/circle square triangle polygon/], [qw/red green blue yellow fuschia/], [qw/a b c d e f g h i j k/] , [qw/Movie TV Radio/] , ); ;; for my $arrayref (@shapes[ 2, 0, 2 ]) { printf qq{'$_' } for @{$arrayref}[ 2 .. $#$arrayref ]; print ''; } " 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'triangle' 'polygon' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k'
If you want to create an entirely new array as 2teez is doing with map below, you can do something like this:
c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @shapes = ( [qw/circle square triangle polygon/], [qw/red green blue yellow fuschia/], [qw/a b c d e f g h i j k/] , [qw/Movie TV Radio/] , ); ;; my @new_ra = map { [ @{$_}[ 2 .. $#$_ ] ] } @shapes[ 2, 0, 2 ] ; dd \@new_ra; " [["c" .. "k"], ["triangle", "polygon"], ["c" .. "k"]]
Update: Array and hash slices are a very convenient notational shortcut, but it's possible to avoid them if you wish. Try to understand the slice examples given and try to work out on your own a variation that does not use slices. If you need help with this, please post again in this thread.
Give a man a fish: <%-{-{-{-<
In reply to Re^3: How do I access only certain elements of a multidimensional array?
by AnomalousMonk
in thread How do I access only certain elements of a multidimensional array?
by Ppeoc
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |