As you may easily imagine, this kind of question gets asked quite so often that it should be easy to locate some info before asking. In particular I recommend you to look for Schwartzian transform and Guttman-Rosler transform. To stay within The Monastery, check the tutorials section, and in particular
Update: minimal example using Guttman-Rosler transform follows. Note that I used : as a separator, which seems appropriate for this example. You may want to choose something different if needed. I also took for granted that the filenames always end with a sequence of four digits, i.e. that the numbers are possibly padded with zeroes. If this is not the case, then just do it yourself with sprintf.
#!/usr/bin/perl -l use strict; use warnings; chomp(my @file=<DATA>); @file=map +(split /:/)[1], sort map +(/(\d+)\.zip/)[0] . ":$_", @file; print for @file; __END__ {ID#0000D128}-20060519_090519_00000ZURACF2954.zip {ID#0000D129}-20060519_091438_00000ZURACF2955.zip {ID#0000D12C}-20060519_092458_00000ZURACF2957.zip {ID#0000D12D}-20060519_092911_00000ZURACF2956.zip
Update2: alternative version explicitly using sprintf as hinted above, and a simple substr instead of split on a separator, since we have fixed length "fields" anyway.
@file=map { substr $_, 7 } sort map sprintf("%06d", /(\d+)\.zip/) . $_, @file;
In reply to Re: problems with advanced array sort
by blazar
in thread problems with advanced array sort
by ultibuzz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |