赋值@array = func(\ @ array)是否在perl中表现良好?

问题描述 投票:1回答:1

标题说明了一切:我想知道perl语句是否像

@array = func(\@array);

总是在perl中表现出确定性,即右手边的评估是否在任何东西存储在左侧的@array之前完成。 func是一个任意的perl内置函数或用户定义的函数,可以修改或不修改引用传递的@array。

perl
1个回答
4
投票

是。 $x = some_combination_of_operators($x)@a = some_combination_of_operators(@a)是常见的做法。

赋值运算符的操作数评估顺序未明确记录,但记录了my $x = $x;local $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
© www.soinside.com 2019 - 2024. All rights reserved.