永続的なプライベート変数のテスト

永続的なプライベート変数のテスト

use strict;
use warnings;
use 5.010;

my $n;

sub marine1{
  $n++;
  print "Hello$n ";
}

sub marine2{
  state $e = 0;
  print "Hello $e";
  $n += 1;
}

marine1;
marine1;
marine1;
marine1;
marine1;
marine1;
marine1;

print " \n --------------- \n";

marine2;
marine2;
marine2;
marine2;
marine2;
marine2;
marine2;

print " \n --------------- \n";

sub running_sum{
  state $sum = 0;
  state @numbers; #初期化することができません。

  foreach my $number(@_){
    push @numbers, $number;
    $sum += $number;
  }
 say "the sum of (@numbers) is $sum";
}

running_sum(5,6);
running_sum(1..3);
running_sum(4);

以下がテストコードの出力結果です。

Hello1 Hello2 Hello3 Hello4 Hello5 Hello6 Hello7
 ---------------
Hello 0Hello 0Hello 0Hello 0Hello 0Hello 0Hello 0
 ---------------
the sum of (5 6) is 11
the sum of (5 6 1 2 3) is 17
the sum of (5 6 1 2 3 4) is 21