Perl 持久化私有变量

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";
}

你可能感兴趣的:(Perl 持久化私有变量)