gpt4 book ai didi

Perl - 为什么需要指定使用 'state' 功能?

转载 作者:行者123 更新时间:2023-12-01 08:52:45 27 4
gpt4 key购买 nike

在学习 Perl 时,我在尝试创建一个记住以前值的函数时遇到了这个问题。

代码:

use strict;
use warnings;

sub running_sum {
state $sum;
state (@numbers);

foreach my $number (@_) {
push @numbers, $number;
$sum += $number;
}

$sum;
}

print running_sum(1..2);
print running_sum(3..5);

当我尝试运行它时,我收到以下错误:

Global symbol "$sum" requires explicit package name (did you forget to declare "my $sum"?) at ../tmp.pl line 12.
Global symbol "@numbers" requires explicit package name (did you forget to declare "my @numbers"?) at ../tmp.pl line 13.
Global symbol "@numbers" requires explicit package name (did you forget to declare "my @numbers"?) at ../tmp.pl line 16.
Global symbol "$sum" requires explicit package name (did you forget to declare "my $sum"?) at ../tmp.pl line 17.
Global symbol "$sum" requires explicit package name (did you forget to declare "my $sum"?) at ../tmp.pl line 20.

如果我添加 use feature 'state';; 该函数运行良好并且不会抛出任何错误但从我从 5.10 开始阅读的内容来看,这应该始终启用(我使用的是 Perl v5.22.1)。

我的解释器或代码有什么奇怪的地方吗,或者这是预期的行为?

最佳答案

这是意料之中的。必须明确启用引入新关键字的功能,以避免破坏可能已定义子程序的现有程序,例如状态.

您可以使用 use feature 声明或使用例如使用 v5.12.0(要求最低 perl 版本为 5.12.0 并启用该版本中可用的所有功能)。

另见 perldoc featureperldoc -f use .

关于Perl - 为什么需要指定使用 'state' 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777709/

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