my @wanted; foreach $msg(@msgs) { if ($msg =~ m[,\s+(\d+)]) { push @wanted, $msg; } } my @sorted = map{ substr $_, 5; } sort { $b cmp $a } map{ sprintf '%05d%s', $_ =~ m[,\s+(\d+)], $_; } @wanted;