Tôi không thể tìm ra những gì đang xảy ra ở đây. 8 từ dưới đây đến từ đâu?Tại sao Thời gian :: HiRes :: index break index?
Time::HiRes
cung cấp tình trạng quá tải stat
giúp mở rộng thời gian có độ phân giải cao (được hỗ trợ trên hệ thống của tôi).
$ 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
Tệp cụ thể đó không có dấu thời gian độ phân giải cao, nhưng đó không phải là điều bí ẩn: bí ẩn là V2, in 8. Trên thực tế, nó luôn in số trong dấu ngoặc vuông.
Câu trả lời rõ ràng, nó phân tích khác nhau, dường như không đúng:
$ 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
Họ deparse cùng (trừ các tùy chọn khác nhau để use Time::HiRes
).
Nó hoạt động tốt nếu tôi sử dụng chức năng của riêng tôi trong cú pháp tương tự, và tôi không thể có được câu trả lời "sai" ngay cả khi tôi trở lại một cái gì đó ngớ ngẩn từ chức năng của tôi:
$ 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"'
$
Đây là gói perl Debian , phiên bản 5.14.2-5. Tôi nhận được kết quả tương tự với 5.10.1-17squeeze2.
V2, ở trên, sản xuất 8 như thế nào? Tôi có hiểu lầm cú pháp Perl theo một cách nào đó hay tôi chỉ cần gửi báo cáo lỗi?
chỉnh sửa: Như @cjm nói, đây là lỗi. Nó đã được sửa trong Time-HiRes-1.9725 theo báo cáo.
Cảm ơn bạn, lỗi được báo cáo https://rt.cpan.org/Public/Bug/Display.html?id=72926 ...bạn có thể muốn thêm '$ Time :: HiRes :: VERSION', tôi không có chúng. – derobert