http://qs321.pair.com?node_id=283468


in reply to Return newest file

stat is your friend

From the Perldocs..

Returns a 13-element list giving the status info for a file, either th +e file opened via FILEHANDLE, or named by EXPR. If EXPR is omitted, i +t stats $_. Returns a null list if the stat fails. Typically used as +follows: ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename); Not all fields are supported on all filesystem types. Here are the mea +ning of the fields: 0 dev device number of filesystem 1 ino inode number 2 mode file mode (type and permissions) 3 nlink number of (hard) links to the file 4 uid numeric user ID of file's owner 5 gid numeric group ID of file's owner 6 rdev the device identifier (special files only) 7 size total size of file, in bytes 8 atime last access time in seconds since the epoch 9 mtime last modify time in seconds since the epoch 10 ctime inode change time (NOT creation time!) in seconds since t +he epoch 11 blksize preferred block size for file system I/O 12 blocks actual number of blocks allocated
Here is a quick and dirty hack of how to do it without using dir..

#! /usr/bin/perl use strict; use warnings; use File::stat; my $dir = $ARGV[0] || "./"; my ($time1, $time2, $returnname); opendir (DIR, $dir) or die "Cannot open $dir: $!\n"; while( my $file = readdir( DIR ) ) { next if $file =~ /^\./; my $sb = stat($file); $time2 = $sb->mtime; if ($time2 > $time1) { $time1 = $time2; $returnname = $file; } #printf "File is %s, size is %s, mtime %s\n", $file, $sb->size, $sb +->mtime; } print "Newest file is $returnname\n";
Note the mtime is returned as an epoc time so if you want yesterdays file all you have to do is subtract 86400 seconds... type stuff...

-----
Of all the things I've lost in my life, its my mind I miss the most.