my @list= ; @list= @list[ map { unpack "N", substr($_,-4) } sort map { # Only these two lines had to be written: my( $foo, $bar )= $list[$_] =~ / (\d+) /g; ~pack("N",$bar) . pack("N",$foo) . pack "N", $_ } 0..$#list ]; print @list; __END__ Item1 - 2 foo, 2 bar Item2 - 0 foo, 1 bar Item3 - 1 foo, 3 bar Item4 - 1 foo, 2 bar Item4 - 3 foo, 2 bar Item4 - 0 foo, 2 bar