मैं यह नहीं समझ सकता कि यहां क्या हो रहा है। नीचे से 8 कहां से आता है?समय :: HiRes :: स्टेट ब्रेक सूची सबस्क्रिप्टिंग क्यों करता है?
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
करने के लिए विभिन्न विकल्प के अलावा अन्य) deparse।
यह ठीक है अगर मैं इसी तरह के वाक्य रचना में अपने कार्य का उपयोग काम करता है, और यहां तक कि अगर मैं अपने समारोह से कुछ मूर्खतापूर्ण लौट रहा "गलत" इस सवाल का जवाब नहीं मिल सकता है:
$ 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"'
$
यह डेबियन के पर्ल पैकेज है , संस्करण 5.14.2-5। मुझे 5.10.1-17 स्क्वीज़ 2 के साथ एक ही परिणाम मिलते हैं।
वी 2, ऊपर, 8 का उत्पादन कैसे करता है? क्या मैं किसी तरह से पर्ल सिंटैक्स को गलत समझ रहा हूं, या क्या मुझे बस एक बग रिपोर्ट दर्ज करने की आवश्यकता है?
संपादित करें: जैसा कि @cjm कहते हैं, यह एक बग है। यह रिपोर्ट के अनुसार टाइम-हायआरस-1.9725 में तय किया गया है।
धन्यवाद, बग की रिपोर्ट https://rt.cpan.org/Public/Bug/Display.html?id=72926 ...आप अपना '$ टाइम :: HiRes :: संस्करण' जोड़ना चाहते हैं, मेरे पास नहीं है। – derobert