#! perl -slw use strict; print map{ $_->[0] } sort { $a->[1] cmp $b->[1] } map { ( my $vstring = $_ ) =~ s[(\d+)][chr $1]ge; [ $_, $vstring ] } ; __DATA__ a1.5 a1.55 a1.55b a1.5b a1.6 a1.6b linux-2.10.50.tar linux-2.10.6.tar linux-2.4.28.tar linux-2.4.29.tar linux-2.4.29a.tar linux-2.4.3.tar