knoppix@Microknoppix:~$ perl -Mstrict -MData::Dumper -we ' > my @arr; > push @{ $arr[ do { my $v = $1 - 1 if m{(\d+)$} } ] }, $_ > for glob q{{red,blue}-{small,medium,large}-{1,2,3,4}}; > print Data::Dumper->Dumpxs( [ \ @arr ], [ qw{ *arr } ] );' @arr = ( [ 'red-small-1', 'red-medium-1', 'red-large-1', 'blue-small-1', 'blue-medium-1', 'blue-large-1' ], [ 'red-small-2', 'red-medium-2', 'red-large-2', 'blue-small-2', 'blue-medium-2', 'blue-large-2' ], [ 'red-small-3', 'red-medium-3', 'red-large-3', 'blue-small-3', 'blue-medium-3', 'blue-large-3' ], [ 'red-small-4', 'red-medium-4', 'red-large-4', 'blue-small-4', 'blue-medium-4', 'blue-large-4' ] ); knoppix@Microknoppix:~$ #### knoppix@Microknoppix:~$ perl -Mstrict -MData::Dumper -we ' > my $idx; > my %idxHash = > map { $_ => $idx ++ } > glob q{{red,blue}-{small,medium,large}}; > my @arr; > push @{ $arr[ do { $idxHash{ $1 } if m{^(\w+-\w+)} } ] }, $_ > for glob q{{red,blue}-{small,medium,large}-{1,2,3,4}}; > print Data::Dumper->Dumpxs( [ \ @arr ], [ qw{ *arr } ] );' @arr = ( [ 'red-small-1', 'red-small-2', 'red-small-3', 'red-small-4' ], [ 'red-medium-1', 'red-medium-2', 'red-medium-3', 'red-medium-4' ], [ 'red-large-1', 'red-large-2', 'red-large-3', 'red-large-4' ], [ 'blue-small-1', 'blue-small-2', 'blue-small-3', 'blue-small-4' ], [ 'blue-medium-1', 'blue-medium-2', 'blue-medium-3', 'blue-medium-4' ], [ 'blue-large-1', 'blue-large-2', 'blue-large-3', 'blue-large-4' ] ); knoppix@Microknoppix:~$ #### knoppix@Microknoppix:~$ perl -Mstrict -MData::Dumper -we ' > my @arr; > my $idx = -1; > push @{ $arr [ $_->[ 0 ] ] }, $_->[ 1 ] for > map { $idx ++; map { [ $idx, $_ ] } glob qq{$_-{1,2,3,4}} } > glob q{{red,blue}-{small,medium,large}}; > print Data::Dumper->Dumpxs( [ \ @arr ], [ qw{ *arr } ] );' ...