インスタンス変数の配列を初期化・再初期化を行う

クラス化したモジュール内をインスタンス化し、インスタンス変数内の配列を初期化・再初期化する際の備忘録。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Data::Dumper;

{
    package Array::Test;
    use strict;
    use warnings;

    sub new {
        my $class = shift;
        my $self = {};
        return bless $self, $class;
    }

    sub init {
        my $self = shift;
        # $self->{array} = (); では動作しない!!
        $self->{array} = [];
    }

    sub set {
        my ($self, $value) = @_;
        push @{$self->{array}}, $value;
    }
    1;
}

my $at = Array::Test->new;
# 配列として使うインスタンス変数を初期化する
$at->init;

# インスタンス変数の配列に値を代入する
print "Initialize Instance Value as Array.\n";
foreach my $num (0..10) {
    $at->set($num);
}

# 代入終了後の配列の内容
print "Dump Instance Value as Array.\n";
print Dumper(@{$at->{array}});

# インスタンス変数を再初期化する
print "Initialize Instance Value as Array.\n";
$at->init;
print Dumper($at->{array});

# インスタンス変数の配列に値を再代入する
print "Enter Numbers into Instance Value as Array Again.\n";
foreach my $num (11..20) {
    $at->set($num);
}

# 再代入終了後の配列の内容
print "Dump Instance Value as Array.\n";
print Dumper($at->{array});

実行結果。

Initialize Instance Value as Array.
Dump Instance Value as Array.
$VAR1 = 0;
$VAR2 = 1;
$VAR3 = 2;
$VAR4 = 3;
$VAR5 = 4;
$VAR6 = 5;
$VAR7 = 6;
$VAR8 = 7;
$VAR9 = 8;
$VAR10 = 9;
$VAR11 = 10;

Initialize Instance Value as Array.
$VAR1 = [];

Enter Numbers into Instance Value as Array Again.
Dump Instance Value as Array.
$VAR1 = [
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20
        ];