#! perl -w use strict; my $basedir = 'c:/test/'; opendir( THEDIR, $basedir) or die "Couldn't open '$basedir' $!"; my @list = map { $basedir . $_ } grep { -f "$basedir/$_" } readdir(THEDIR); closedir (THEDIR) or warn "Close '$basedir' failed: $!"; my %files; for my $file (@list) { my $datetime = (stat $file)[9]; # or 8 or 10 - see perldoc -f stat to choose. $files{$datetime} = $file; # save name for later } for my $datetime ( sort keys %files ) { my $file = $files{$datetime}; # retrieve name open DATAFILE, $file or warn "Failed to open $file: $!\n" and next; $files{$datetime} = []; # overwrite name with ref to anon array of data. close DATAFILE or warn "Couldn't close $file: $!\n"; chomp @{$files{$datetime}}; # chomp all the values and print them # You could assign these to discrete $vars to ease refs if you prefer # Or 'use constant REF => 0;' etc to make indexes more meaningful print @{$files{$datetime}}[0], # $ref @{$files{$datetime}}[1], # $cust @{$files{$datetime}}[2], # $email @{$files{$datetime}}[3], # $phone @{$files{$datetime}}[4], # $mobile @{$files{$datetime}}[5]; # $posted }