use Test::More tests => 1; my @unsorted = ( [ 'blah', 'asdf', 'foo', 'bar' ], ['two'], [ 'zzz', 'def', 'ghi' ], ['one'], [ 'mmm', 'def', 'ghi' ], [ 'qqq', 'xyz', 'aaa' ] ); my @wanted = ( ['one'], ['two'], [ 'qqq', 'xyz', 'aaa' ], [ 'mmm', 'def', 'ghi' ], [ 'zzz', 'def', 'ghi' ], [ 'blah', 'asdf', 'foo', 'bar' ] ); my @sorted = sort { @$a <=> @$b || do { my ( $left, $right ) = ( [@$a], [@$b] ); my $res = 0; $res = pop(@$left) cmp pop(@$right) while @$left && !$res; $res; }; } @unsorted; diag "@{$_}\n" for @sorted; is_deeply( \@sorted, \@wanted, 'Sorted array matches expectation.' );