#!perl use strict; my %tmp=(); while (){ chomp; if ( /(.*\D)?(\d+)$/ ){; my $key = pack "A50N",$1,$2; $tmp{$key} = $_; } else { warn "Data format error $_"; } } my @sorted = map { $tmp{$_} } sort keys %tmp; print "$_\n" for @sorted; __DATA__ 123 blank_5_str_1 blank_6_str_10 blank_5_str_1 blank_6_str_12 blank_5_str_13 blank_6_str_14 blank_5_str_2 blank_5_str_31 blank_5_str_401 blank_5_str_9 blank_5_str_6 dlank_5_str_8 clank_5_str_7 blank_5_str_9 98