johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { no warnings qw{ uninitialized }; pack qq{A${width}NA*}, m{(.*\D)?(\d+)$}, $_; } } @data;' 5 17 102 some_12_garbage_6 some_12_garbage_23 this_5_string_8 this_5_string_12 this_5_string_19 this_5_string_23 this_5_string_101 #### johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { m{(.*\D)?(\d+)$}; pack qq{A${width}NA*}, ( $1 ? $1 : qq{\x7f} x $width ), $2, $_; } } @data;' some_12_garbage_6 some_12_garbage_23 this_5_string_8 this_5_string_12 this_5_string_19 this_5_string_23 this_5_string_101 5 17 102 #### johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { no warnings qw{ uninitialized }; pack qq{NA${width}A*}, reverse( m{(.*\D)?(\d+)$} ), $_; } } @data;' 5 some_12_garbage_6 this_5_string_8 this_5_string_12 17 this_5_string_19 some_12_garbage_23 this_5_string_23 this_5_string_101 102