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


in reply to Reading from file- not change atime

When opening a filehandle, use utime:
#!/usr/bin/perl use strict; use warnings; no warnings qw(uninitialized); use File::stat; my $file = shift or die $!; open my $fh, '<', $file or die $!; my ($atime, $mtime) = (stat($fh))[8,9]; utime($atime, $mtime, $fh) or die "couldn't restore $file to original times: $!"; close $fh;

Replies are listed 'Best First'.
Re^2: Reading from file- not change atime
by Eliya (Vicar) on Dec 10, 2013 at 15:45 UTC

    Actually, you shouldn't load the module File::stat when you say (stat($fh))[8,9], because the module overrides the stat builtin, and the overridden stat returns an object providing methods such as atime, mtime, etc., instead of a list of values...

    In other words, either simply don't use File::stat, or say something like

    my $st = stat($fh) or die $!; my ($atime, $mtime) = ($st->atime, $st->mtime); ...

    or even (if you like):

    use File::stat ":FIELDS"; ... stat($fh) or die $!; my ($atime, $mtime) = ($st_atime, $st_mtime); ...

    (Of course, you could also do away with the intermediate variables, and put the method calls directly in utime's argument list, i.e. utime($st->atime, $st->mtime, $fh), in case you're using File::stat).