Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
赋值@array=func(\@array)在perl中是否表现良好?_Perl - Fatal编程技术网

赋值@array=func(\@array)在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;

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

@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