赋值@array=func(\@array)在perl中是否表现良好?
标题说明了一切: 我想知道perl语句是否像赋值@array=func(\@array)在perl中是否表现良好?,perl,Perl,标题说明了一切: 我想知道perl语句是否像 @array = func(\@array); 在perl中始终表现出确定性,即在将任何内容存储在左侧的@array中之前,是否完成对右侧的求值。func是一个任意的perl内置函数或用户定义函数,可以修改也可以不修改通过引用传递的@array。是$x=运算符的某些组合$x和@a=运算符的某些组合_operators@a这是惯例 赋值运算符的操作数求值顺序没有明确记录,但my$x=$x;本地$x=$x;记录在案。作为另一个例子,@a=sort@a;
@array = func(\@array);
在perl中始终表现出确定性,即在将任何内容存储在左侧的@array中之前,是否完成对右侧的求值。func是一个任意的perl内置函数或用户定义函数,可以修改也可以不修改通过引用传递的@array。是$x=运算符的某些组合$x和@a=运算符的某些组合_operators@a这是惯例 赋值运算符的操作数求值顺序没有明确记录,但my$x=$x;本地$x=$x;记录在案。作为另一个例子,@a=sort@a;它不仅很常见,而且经过优化,可以就地进行排序。这表明了对所讨论的构造的支持。即使是时髦的东西,比如$x,$y=$y,$x;这是完全支持的 最后,只有一个Perl编译器,它总是产生相同的结果
$ perl -MO=Concise,-exec -e'@array = func(\@array);'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s \
4 <0> pushmark s |
5 <#> gv[*array] s |
6 <1> rv2av[t5] lKRM/1 > RHS of list assignment evaluated first
7 <1> srefgen sKM/1 |
8 <#> gv[*func] s/EARLYCV |
9 <1> entersub[t6] lKS/TARG /
a <0> pushmark s \
b <#> gv[*array] s > LHS of list assignment evaluated second
c <1> rv2av[t2] lKRM*/1 /
d <2> aassign[t7] vKS/COM_AGG
e <@> leave[1 ref] vKP/REFC
-e syntax OK
对$x=运算符的某些组合$x和@a=运算符的某些组合_operators@a这是惯例
赋值运算符的操作数求值顺序没有明确记录,但my$x=$x;本地$x=$x;记录在案。作为另一个例子,@a=sort@a;它不仅很常见,而且经过优化,可以就地进行排序。这表明了对所讨论的构造的支持。即使是时髦的东西,比如$x,$y=$y,$x;这是完全支持的
最后,只有一个Perl编译器,它总是产生相同的结果
$ perl -MO=Concise,-exec -e'@array = func(\@array);'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <0> pushmark s \
4 <0> pushmark s |
5 <#> gv[*array] s |
6 <1> rv2av[t5] lKRM/1 > RHS of list assignment evaluated first
7 <1> srefgen sKM/1 |
8 <#> gv[*func] s/EARLYCV |
9 <1> entersub[t6] lKS/TARG /
a <0> pushmark s \
b <#> gv[*array] s > LHS of list assignment evaluated second
c <1> rv2av[t2] lKRM*/1 /
d <2> aassign[t7] vKS/COM_AGG
e <@> leave[1 ref] vKP/REFC
-e syntax OK
为了一致性起见,这不应该是第一行中的@a=f\@a吗?@BarneySchmale,不是。这个问题不是专门关于引用的,我的答案也不是。f@a可以是func\@a或任何其他函数。实际上问题是关于@array作为引用传递的情况。@BarneySchmale,func是任意perl内置函数。func是任意perl内置函数或用户定义函数,为了一致性,它可以修改或不修改引用传递的@array,这不应该是第一行中的@a=f\@a吗?@BarneySchmale,不是。问题并不是特别关于引用,我的答案也不是。f@a可以是func\@a或任何其他函数。实际上问题是关于@array作为引用传递的情况。@BarneySchmale,func是任意perl内置函数。func是任意perl内置函数或用户定义函数,可以修改也可以不修改通过引用传递的@array