3
Perl을 배우는 동안 이전 값을 기억하는 함수를 만들려고하면서이 문제를 보았습니다.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을 사용하고 있습니다).
인터프리터 나 코드에 이상한 점이 있거나 예상되는 동작입니까?