use strict; use warnings; use feature qw{ say }; my @unsorted = qw{ page1.html test4.txt index2.html page11.html rubbish.html page3.html index1.html page2.html garble.html page0.html }; my @sorted; my @rejects; push @{ ( m{^\xff{54}} ) ? \ @rejects : \ @sorted }, substr $_, 54 for sort map { pack q{a50Na50}, ( m{^([A-Za-z]+)(\d+)\.html$} ? ( $1, $2 ) : ( qq{\xff} x 50, -1 ) ), $_ } @unsorted; say q{-} x 20; say for @sorted; say q{-} x 20; say for @rejects; say q{-} x 20;