ここで何が起こっているのか理解できません。以下の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"'
$
これはDebianのperlパッケージ、バージョン5.14.2-5です。5.10.1-17squeeze2でも同じ結果が得られます。
上記のV2はどのように8を生成しますか?何らかの方法でPerl構文を誤解していますか、それともバグレポートを提出する必要がありますか?
編集:@cjmが言うように、これはバグです。レポートによると、Time-HiRes-1.9725で修正されています。