in reply to Finding a file by age (Newest First)

The stat call returns a list with mtime at index 9. Here's an example. I use glob to get the directory contents, but your readdir works, too. I'll pitch in a Schwarzian Transform to reduce the load of stat.

my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat)[9], $_ ] } glob('*'); { # diagnostic local $, = ' '; print @sorted; } my @results = grep { /^$mask/ig } @sorted; print "Your file is: ", $results[$position-1], $/;
Having $b to the left in the sort comparison gives newest first.

If $mask is given as a glob pattern instead of a regex, that can replace '*' in the glob call to remove the grep step. If the arguments come from the command line, your shell will do the glob for you, making @ARGV[1..$#ARGV] your filename list.

Update: Improved version, quicker by sorting a smaller pool:

my @candidates = grep { /^$mask/ig } glob('*'); my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat)[9], $_ ] } @candidates; print "Your file is: ", $sorted[$position-1], $/ if defined $sorted[$position-1];

After Compline,
Zaxo

Replies are listed 'Best First'.
Re^2: Finding a file by age (Newest First)
by ChuckularOne (Prior) on Jun 04, 2004 at 19:11 UTC
    Thanks Zaxo! This did exactly what I was looking for.