my @data= ([...],[...],...); my $idx= 3; my @idx= sort { $data[$a][$idx] <=> $data[$b][$idx] }, 0..$#data; for my $row ( @data[@idx] ) { for my $value ( @{$_} ) { ... } } # or print $q->table( map { $q->Tr( map { $q->td($_) } @{$_} ) } @data[@idx] );