http://www.perlmonks.org?node_id=400321


in reply to Finding oldest file in directory

You mentioned portability was a requirement, so you should use File::Spec to build paths. "/" is not the file seperator on Macs, for example.

I have a script that needs to determine the oldest file in a particular directory

If all you're concerned about is which file is the oldest, there's no need to sort:

sub get_oldest { my ($dir) = @_; my $oldest; my $oldest_time; my $file_spec = File::Spec->catfile($dir, '*.pl'); foreach (glob $file_spec") { my $time = (stat $_)[10]; if (!$oldest_time || $time < $oldest_time) { $oldest = $_; $oldest_time = $time; } } return $oldest; }

I don't know how efficient glob is. You can get rid of it:

use DirHandle (); use File::Spec (); sub get_oldest { my ($dir) = @_; my $oldest; my $oldest_time; my $dh = DirHandle->new($dir); while (defined($_ = $dh->read())) { next unless (/\.pl$/i); my $full_path = File::Spec->catfile($dir, $_); my $time = (stat $full_path)[10]; if (!$oldest_time || $time < $oldest_time) { $oldest = $_; $oldest_time = $time; } } return $oldest; }