use strict; while () { chomp; push @_, $_; } print join "\n", sort { my ($d1, $w1) = $a =~ m/F(\d+)(\w+)?/; my ($d2, $w2) = $b =~ m/F(\d+)(\w+)?/; $d1 <=> $d2 || mcmp($w1, $w2) } @_; sub mcmp { return 0 if $_[0] eq $_[1]; return -1 if !$_[1]; return 1 if !$_[0]; return $_[0] cmp $_[1]; } __DATA__ F1.jpg F10.jpg F11.jpg F12.jpg F1a.jpg F1b.jpg F2.jpg F3.jpg F4.jpg F5.jpg F6.jpg