9. 持久化私有变量
-
在子程序中用 my操作符可以创建私有变量,但每次调用子程序时,这个私有变量都会被重新定义。
-
state 操作符声明的变量可以在子程序的多次调用期间保留之前的值,并且其作用域仍局限在子程序内部。
-
任意类型的变量都可以被声明为 state变量。
sub marine {
my $n += 1; #每次调用子程序时,私有变量都会被重新定义
print "Hello, sailor number $n!\n";
}
&marine;
&marine;
&marine;
&marine;
&marine;
use v5.10;
sub marine {
state $n += 1; # state 声明持久化私有变量
print "Hello, sailor number $n!\n";
}
# 任意类型的变量都可以被 state 声明
&running_sum(5, 6);
&running_sum(1..3);
&running_sum(4);
sub running_sum {
state $sum = 0; # state声明标量变量
state @numbers; # state声明数组变量
foreach my $number (@_) {
push @numbers, $number;
$sum += $number;
}
say "The sum of (@numbers) is $sum";
}
网友评论