my @sorted = map{ substr $_, 5; } sort { $b cmp $a } map{ sprintf '%05d%s', $_ =~ m[,\s+(\d+)], $_; } @msgs; #SOME STUFF foreach my $warning(@sorted) { print OUT $warning unless ($warning =~ ""); } #### Use of uninitialized value in sprintf at script.pl line 43, line 7253. Argument isn't numeric in sprintf at script.pl line 43, line 7253 #### my @sorted = map{ substr $_, 125; } sort { $b cmp $a } map{ sprintf '%0125d%s', $_ =~ m[,\s+(\d+)], $_; } @msgs;