#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my @new_order = (0, 1, 2, 3, 5, 4); my @AoA = ( [ 'zero', ], [ 'one', ], [ 'two', ], [ 'three', ], [ 'four', ], [ 'five', ], ); my @new_aoa = @AoA[@new_order]; print Dumper \@new_aoa; __END__ $VAR1 = [ [ 'zero' ], [ 'one' ], [ 'two' ], [ 'three' ], [ 'five' ], [ 'four' ] ]; #### my @new_order = (0, 1, 2, 3, 5, 4); my @AoA = ( [ qw(1 2 3 4 5 6), ], [ qw(a b c d e f), ], ); my @new_aoa; for (@AoA){ push @new_aoa, [@$_[@new_order]]; } print Dumper \@new_aoa;