2016-06-12 3 views
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을 사용하고 있습니다).

인터프리터 나 코드에 이상한 점이 있거나 예상되는 동작입니까?

답변

9

예상됩니다. 새 키워드를 소개하는 기능은 명시 적으로 사용 설정되어야합니다. 예를 들어 state.

use feature 선언 또는 예를 들어 기능을 사용하도록 설정할 수 있습니다. use v5.12.0 (최소 perl 버전 5.12.0이 필요하며 해당 버전에서 사용할 수있는 모든 기능을 사용 가능)

perldoc featureperldoc -f use도 참조하십시오.

관련 문제