Неожиданный вывод из Perl-скрипта

Следующий скрипт не выводит ничего:

use File::stat;
use Time::localtime;
my $filename = 'c:\testfile';
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
              $atime,$mtime,$ctime,$blksize,$blocks)
                  = stat($filename);
print("$mtime");

c:\testfile существует.

Я видел несколько ответов на SO - это, например -- кажется, что массив, возвращаемый stat(), должен иметь в себе что-то значимое, но я не видел, чтобы это имело место на практике.

Это 64-битный ActivePerl в Windows 7.

Разве stat не делает то, что, казалось, подразумевали эти ответы, или функции даты/времени файла Perl не работают под Windows (или 64-битной Windows, или что-то в этом роде?)


person 15ee8f99-57ff-4f92-890c-b56153    schedule 09.02.2015    source источник
comment
Встроенный stat отличается от stat из File::stat (это не то же самое, что File::Stat).   -  person ThisSuitIsBlackNot    schedule 10.02.2015
comment
икегами уже сделал это.   -  person ThisSuitIsBlackNot    schedule 10.02.2015
comment
Использовать его надлежащим образом — это не ответ.   -  person 15ee8f99-57ff-4f92-890c-b56153    schedule 10.02.2015
comment
Удалить use File::stat; является ответом, а File::stat заменить stat на тот, у которого другой интерфейс ничем не отличается от того, что я сказал в своем комментарии (кроме ссылок). В любом случае, теперь у вас есть два ответа, и мне не нужно добавлять еще один.   -  person ThisSuitIsBlackNot    schedule 10.02.2015
comment
Кроме ссылок. Верно. Его ответ был недостаточно подробным, чтобы быть хорошим комментарием. Но, как вы упомянули, Собрик проделал отличную работу.   -  person 15ee8f99-57ff-4f92-890c-b56153    schedule 10.02.2015


Ответы (2)


Это отлично работает:

#!perl

use strict;
use warnings;

my $filename = 'c:\Users\username\Documents\asdf23rasdf.pl';
my ($dev,  $ino,   $mode,  $nlink, $uid,     $gid, $rdev,
    $size, $atime, $mtime, $ctime, $blksize, $blocks
) = stat($filename);
print($mtime);

Как упоминалось в комментариях, встроенный в Perl stat работает так же, как и выше. Вам не нужно использовать File::Stat или File::stat для этого. Они просто предоставляют разные интерфейсы для одной и той же функциональности.

Если вы хотите сделать это с помощью File::stat, это будет выглядеть так:

use File::stat;

my $filename = 'c:\Users\username\Documents\asdf23rasdf.pl';
my $stats = stat($filename);
print( $stats -> mtime);
person Sobrique    schedule 09.02.2015

File::stat заменяет stat на тот, у которого другой интерфейс. Удалите use File::stat; или используйте его stat соответствующим образом.

person ikegami    schedule 09.02.2015