my @vslice = (['b','c'], ['i','j'], ['y','z']); #### my @yxslice = ( ['b','i','y'], ['c','j','z'] ); #### #! perl -slw use strict; use Data::Dumper; sub vslice { map{ [ @{$_}[@_] ] } @{+shift}; } sub yxslice { my $aref = shift; map{ my $i=$_; [ map{ $_->[$i] } @$aref ] } @_; } my @arr = (['a','b','c','d'], ['h','i','j','k'], ['w','x','y','z']); my @vslice = vslice \@arr, 1..2; print Dumper \@vslice; my @yxslice = yxslice \@arr, 1..2; print Dumper \@yxslice; __END__ C:\test>240941 $VAR1 = [ [ 'b', 'c' ], [ 'i', 'j' ], [ 'x', 'y' ] ]; $VAR1 = [ [ 'b', 'i', 'x' ], [ 'c', 'j', 'y' ] ]; #### sub vslice (\@@) { map{ [@{$_}[@_]] } @{+shift}; } sub yxslice (\@@) { my $aref = shift; map{ my $i=$_; [ map{ $_->[$i] } @$aref ] } @_; }