note
friedo
There's probably a more elegant way, but this works.
<p>
<code>
@files = sort { my ($ad) = ( $a =~ /fwlog\.(\d+)\w+/ );
my ($bd) = ( $b =~ /fwlog\.(\d+)\w+/ );
$ad <=> $bd } @files;
print join "\n", @files;
OUTPUT:
fwlog.1Mar2005.gz
fwlog.2Mar2005.gz
fwlog.3Mar2005.gz
fwlog.4Mar2005.gz
fwlog.5Mar2005.gz
fwlog.6Mar2005.gz
fwlog.7Mar2005.gz
fwlog.8Mar2005.gz
fwlog.9Mar2005.gz
fwlog.14Mar2005.gz
fwlog.15Mar2005.gz
fwlog.16Mar2005.gz
fwlog.17Mar2005.gz
fwlog.18Mar2005.gz
fwlog.19Mar2005.gz
fwlog.20Mar2005.gz
fwlog.21Mar2005.gz
</code>
<p>
<b>Update:</b> I'm dumbfounded that so many have reccomended the Schwartzian for such a trivial sorting operation. Is the added complexity worth it for sorting such a small amount of data? Neither [id://JediWizard]'s nor [id://Tanktalus]'s code appear to even work correctly. (See Readmore). This is a case of over-zealous premature optimization if I've ever seen it.
<p>
<b>Up-Update:</b>Typos.
<p>
<readmore>
JediWizard's output:
<code>
fwlogfwlog.14Mar2005.gz.Mar2005
fwlogfwlog.15Mar2005.gz.Mar2005
fwlogfwlog.16Mar2005.gz.Mar2005
fwlogfwlog.17Mar2005.gz.Mar2005
fwlogfwlog.18Mar2005.gz.Mar2005
fwlogfwlog.19Mar2005.gz.Mar2005
fwlogfwlog.1Mar2005.gz.Mar2005
fwlogfwlog.20Mar2005.gz.Mar2005
fwlogfwlog.21Mar2005.gz.Mar2005
fwlogfwlog.2Mar2005.gz.Mar2005
fwlogfwlog.3Mar2005.gz.Mar2005
fwlogfwlog.4Mar2005.gz.Mar2005
fwlogfwlog.5Mar2005.gz.Mar2005
fwlogfwlog.6Mar2005.gz.Mar2005
fwlogfwlog.7Mar2005.gz.Mar2005
fwlogfwlog.8Mar2005.gz.Mar2005
fwlogfwlog.9Mar2005.gz.Mar2005
</code>
<p>
And Tanktalus's:
<p>
<code>
fwlog.9Mar2005.gz
fwlog.8Mar2005.gz
fwlog.7Mar2005.gz
fwlog.6Mar2005.gz
fwlog.5Mar2005.gz
fwlog.4Mar2005.gz
fwlog.3Mar2005.gz
fwlog.2Mar2005.gz
fwlog.21Mar2005.gz
fwlog.20Mar2005.gz
fwlog.1Mar2005.gz
fwlog.19Mar2005.gz
fwlog.18Mar2005.gz
fwlog.17Mar2005.gz
fwlog.16Mar2005.gz
fwlog.15Mar2005.gz
fwlog.14Mar2005.gz
</code>
</readmore>
441568
441568