私は、perl で同じ結果が得られる$x=(2,3,4,5)
と($x)=(2,3,4,5)
思っていましたが、テストで何が起こったかに驚きました。なぜこの動作がそのままなのか、なぜwantarray
動作が異なるのか疑問に思っています。ここに私のテストと結果があります:
>perl -e '$x=(1,2,3,5);print("$x\n")'
5
>perl -e '($x)=(1,2,3,5);print("$x\n")'
1
>perl -e '$x=(wantarray ? (1,2,3,5) : 4);print("$x\n")'
4
>perl -e '($x)=(wantarray ? (1,2,3,5) : 4);print("$x\n")'
4
この動作はすべてのプラットフォームで一貫しており、信頼性がありますか?
おっと。wantarray は、サブルーチン呼び出しのコンテキスト用です...
>perl -e '$x=test();sub test{return(1,2,3,5)};print("$x\n")'
5
>perl -e '($x)=test();sub test{return(1,2,3,5)};print("$x\n")'
1
>perl -e '$x=test();sub test{return(wantarray ? (1,2,3,5) : 4)};print("$x\n")'
4
>perl -e '($x)=test();sub test{return(wantarray ? (1,2,3,5) : 4)};print("$x\n")'
1
だから私はそれが一貫していると思いますが、リストがスカラーコンテキストで最後の値を返すのはなぜですか?