gpt4 book ai didi

perl - Perl中逗号运算符的执行顺序

转载 作者:行者123 更新时间:2023-12-01 02:50:05 24 4
gpt4 key购买 nike

考虑以下脚本:

print'+'x$z,($z=1,$w)?'':$_ for 1..3;

正如我所料,这会打印 1+2+3 .变量 $z最初未分配,所以 '+'x$z评估为空;之后, $z设置为 1,所以 '+'x$z现在评估为 + .

但是,如果我更改此设置,则 $z包含 +本身:
print$z,($z='+',$w)?'':$_ for 1..3;

脚本现在打印 +1+2+3 .这对我来说似乎暗示执行顺序不同,但我不明白为什么。

导致这两个示例表现不同的执行顺序的确切规则是什么?执行顺序是否明确定义?

最佳答案

参数在 Perl 中通过引用传递。

print $z, ($z='+',$w) ? '' : $_;

基本上是
{
local @_;
alias $_[0] = $z;
alias $_[1] = ($z='+',$w) ? '' : $_;
&print;
}

因为 $_[0]别名为 $z ,更改为 $z反射(reflect)在 $_[0] ,即使这些变化发生在参数被评估之后。

您可以在以下内容中看到相同的效果:
my $x = 3;
sub f {
++$x;
print("$_[0]\n");
}
f($x); # 4

关于perl - Perl中逗号运算符的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com