#!/usr/bin/perl use strict; use warnings; my @files; while () { chomp; push @files, $_; } @files = sort by_first_third @files; sub by_first_third { my ($Afirst,$Athird) = (split '_|\.',$a)[0,2]; my ($Bfirst,$Bthird) = (split '_|\.',$b)[0,2]; $Afirst <=> $Bfirst or $Athird <=> $Bthird } print join ("\n",@files), "\n\n"; print "first file: $files[0]", "\n"; print "last file : $files[-1]", "\n"; =prints 971305332_XXXXXX12345678765463565E_28062011102508.TXT 971305332_AAAAAAAA12345678765463565E_28062011102508.TXT 971305332_CCCC12345678765463565E_28062011102508.TXT 971305332_CCCC12345678765463565E_28062020102508.TXT 981139804_ABCDEF12345678765463565E_28062016102508.TXT 981139804_ABCDEF12345678765463565E_28062016112508.TXT 981139804_ABCDEF12345678765463565E_28062016172508.TXT 981139804_ABCDEF12345678765463565E_28062017102508.TXT first file: 971305332_XXXXXX12345678765463565E_28062011102508.TXT last file : 981139804_ABCDEF12345678765463565E_28062017102508.TXT =cut __DATA__ 981139804_ABCDEF12345678765463565E_28062016172508.TXT 981139804_ABCDEF12345678765463565E_28062016112508.TXT 981139804_ABCDEF12345678765463565E_28062016102508.TXT 981139804_ABCDEF12345678765463565E_28062017102508.TXT 971305332_XXXXXX12345678765463565E_28062011102508.TXT 971305332_AAAAAAAA12345678765463565E_28062011102508.TXT 971305332_CCCC12345678765463565E_28062011102508.TXT 971305332_CCCC12345678765463565E_28062020102508.TXT