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;
}