use strict; use warnings; chomp( my @fileNames = ); my @sortedFileNames = map $_->[0], sort { $b->[1] <=> $a->[1] } map { my ( $d, $m, $y ) = /(\d+)/g; [ $_, "$y$m$d" ] } grep /^backup_\d\d_\d\d_\d{4}.bak$/, @fileNames; shift @sortedFileNames; if (@sortedFileNames) { print "$_\n" for @sortedFileNames; #unlink @sortedFileNames; } __DATA__ backup_21_01_2013.bak file.txt backup_20_01_2013.bak what_is_this.doc backup_24_01_2013.bak never_open_this.docx backup_22_01_2013.bak stuff.ini backup_23_01_2013.bak more_stuff.ini deleteOldBackups.pl