Почему Time :: HiRes :: stat прерывает индексирование списка?

Я не могу понять, что здесь происходит. Откуда взялось указанное ниже 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

Они разлагаются одинаково (кроме другого варианта использования 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.

7
задан derobert 13 February 2012 в 20:20
поделиться