2

私は、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

だから私はそれが一貫していると思いますが、リストがスカラーコンテキストで最後の値を返すのはなぜですか?

4

2 に答える 2