我曾假设在 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
所以我猜它是一致的,但是为什么列表在标量上下文中返回最后一个值?