gpt4 book ai didi

perl - 即使作为左值,Autovivification 也不起作用

转载 作者:行者123 更新时间:2023-12-05 01:34:28 26 4
gpt4 key购买 nike

我有这个简单的代码:

 #!/usr/bin/perl
@inp = map 2**$_, 0..6;
@cc = grep {
my $num = $inp[$_];
my $sum; #---- HERE, I have to have the var declared first, before init.
$sum += $_ for (split //, $num);
print "$sum\n";
$sum % 2;
} 0..$#inp;

在这里,$sum 将被用在 for 循环中,但是在这种情况下:

#!/usr/bin/perl
@inp = map 2**$_, 0..6;
@cc = grep {
my $num = $inp[$_];
my $sum += $_ for (split //, $num); # HERE, Trying to autovificate - wont work
print "$sum\n";
$sum % 2;
} 0..$#inp;

但是当我在 for 循环的同一行使用 var $sum - 这意味着我试图立即声明和启动 - 自动激活应该在哪里工作 - 正如我期望自动激活$sum 为零(因为与数学运算符 += 一起使用),但不起作用,但为什么会这样?自动复活的规则是什么?

最佳答案

这不是自动生成。你有一个语法错误。如果您打开了 use strictuse warnings,它会更明显。

修复后的 for 构造将左侧视为一个 block 。所以循环体有一个范围。因此,您在该循环体范围内声明了您的 my $sum,并且它在外部不可见。

如果您打开使用警告,您将得到Use of uninitialized value $sum in concatenation (.) or string at ... line 6,这是之后的 print

您需要先声明变量(并使用strictwarnings!)。

关于perl - 即使作为左值,Autovivification 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125134/

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