First, you have to remember that readdir returns every directory entry, including "." and ".." (which are directories, as you must know, and which could often, by coincidence, be dated more recently than any data file in the directory).
If you want to pick the most recent entry in a directory (not including "." or ".."), then try something like this:
In that version, you just have to provide the directory path as a command line arg; it uses -M (as suggested by toolic below) to get the age of each file (as a floating point value, in days) relative to the time when the script starts running.#!/usr/bin/perl use strict; use File::Spec; my $Usage = "Usage: $0 pathname\n"; die $Usage unless ( @ARGV == 1 and -d $ARGV[0] ); my $path = shift; opendir( D, $path ) or die "$path: $!\n"; my %files; for my $file ( grep !/^.{1,2}$/, readdir D ) { my $filepath = File::Spec->catfile( $path, $file ); my $file_age = -M $filepath; $files{$file_age} = $file; } my @age_order; push @age_order, $files{$_} for ( sort {$a<=>$b} keys %files ); print "Newest file in $path is: $age_order[0]\n";
In reply to Re^2: Compare script
by graff
in thread Compare script
by TheRedcoat
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |