Nie mogę rozgryźć, co tu się dzieje. Skąd pochodzą poniższe 8?Dlaczego indeksacja listy przerwań Time :: HiRes :: stat?
Time::HiRes
zapewnia przeciążenie stat
, które rozszerza czasy, aby uzyskać wysoką rozdzielczość (co jest obsługiwane w moim systemie).
$ 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
że dany plik nie posiada wysokiej rozdzielczości znacznik czasu, ale to nie jest tajemnica: tajemnica jest V2, która drukuje 8. W rzeczywistości, to zawsze drukuje liczby w nawiasach kwadratowych.
Oczywista odpowiedź, że analizuje się inaczej, nie wydaje się poprawne:
$ 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
one deparse takie same (inna niż inną opcję do use Time::HiRes
).
To działa dobrze, jeśli mogę użyć własnej funkcji w podobnej składni, a ja nie mogę dostać „złego” odpowiedź nawet jeśli wrócę coś głupie z mojej funkcji:
$ 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"'
$
Jest to pakiet perl Debiana , wersja 5.14.2-5. Otrzymuję takie same wyniki z 5.10.1-17squeeze2.
W jaki sposób V2, powyżej, produkuje 8? Czy nie rozumiem składni Perla w jakiś sposób, czy po prostu muszę złożyć raport o błędzie?
edytuj: Jak mówi @cjm, jest to błąd. Zostało to naprawione w Time-HiRes-1.9725 zgodnie z raportem.
Dziękuję, zgłoszenie błędu https://rt.cpan.org/Public/Bug/Display.html?id=72926 ...możesz dodać swoje '$ Time :: HiRes :: VERSION's, nie mam ich. – derobert