use strict; use Data::Dumper; my @in = ( [qw[M N]], [qw[M N Q P O]], ['MN', 'QPO'], [qw[C B A]], ['C ', 'A', 'A], [qw[U S]], [qw[V T]], [qw[C G F E D]], [qw[C G F H]], [qw[C G F H I]], [qw[C G F H J]], [qw[M K]], ); sub arrayrefs { my $lindex = $#$a < $#$b ? $#$a : $#$b; for (0 .. $lindex) { return $$a[$_] cmp $$b[$_] unless $$a[$_] eq $$b[$_]; } #equal or less return $#$a <=> $#$b; } my @out = sort arrayrefs @in; print Dumper @out;