in reply to problems with advanced array sort

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;