in reply to Re: Compare script
in thread Compare script

You say you want to "compare file time stamps", but you don't say what the goal is. Based on looking at your "compare" sub, it would seem that you are trying to identify the most recent file in a directory.

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:

#!/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 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.