Я не могу понять, что здесь происходит. Откуда взято 8 ниже?
Time::HiRes
обеспечивает перегрузку stat
, которая увеличивает время с высоким разрешением (которое поддерживается в моей системе).
$ perl -MTime::HiRes -e 'print +(stat("foo"))[8], "\n"' # V1
1322915623
$ perl -MTime::HiRes=stat -e 'print +(stat("foo"))[8], "\n"' # V2
8
$ perl -MTime::HiRes=stat -e '@a = stat("foo"); print $a[8], "\n"' # V3
1322915623
Этот конкретный файл не имеет отметки времени с высоким разрешением, но это не загадка: загадка - это V2, который печатает 8. На самом деле, он всегда печатает число в квадратных скобках.
Очевидный ответ, он по-разному разбирается, кажется неправильным:
$ perl -MO=Deparse -MTime::HiRes -e 'print +(stat("foo"))[8], "\n"' # V1
use Time::HiRes;
print((stat 'foo')[8], "\n");
-e syntax OK
$ perl -MO=Deparse -MTime::HiRes=stat -e 'print +(stat("foo"))[8], "\n"' # V2
use Time::HiRes (split(/,/, 'stat', 0));
print((stat 'foo')[8], "\n");
-e syntax OK
Они отбрасывают то же самое (кроме различных опций use Time::HiRes
).
Это прекрасно работает, если я использую свою собственную функцию в аналогичном синтаксисе, и я не могу получить «неправильный» ответ, даже если я возвращаю что-то глупое из своей функции:
$ perl -e 'sub bar() { return qw(a b c d e f g h i j) }; print +(bar)[8], "\n"'
i
$ perl -e 'sub bar() { return undef }; print +(bar)[8], "\n"'
$
Это пакет Perl Debian версии 5.14.2-5. Я получаю те же результаты с 5.10.1-17squeeze2.
Как V2, выше, производит 8? Я неправильно понимаю синтаксис Perl или мне просто нужно подать отчет об ошибке?
edit: как говорит @cjm, это ошибка. Это исправлено в Time-HiRes-1.9725 согласно отчету.