配列の初期化と再初期化、そしてリファレンスとデリファレンスについて
備忘録。
制御構文内で配列のリファレンスを再初期化したいときに、思う通りに再初期化できないので、簡単な動作結果を確認する。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Data::Dumper; # 配列のリファレンス用に変数を宣言する my $ref_array; # 初期化のしかたでリファレンス先のデータ型が決まる $ref_array = 1; $ref_array = []; print ref $ref_array, "\n"; # 配列のリファレンス用に変数をデリファレンスして初期化する @{$ref_array} = qw/1 2 3 4 5 6/; # デリファレンスした場合の表示内容 print "Dump Reference of Array.\n"; print Dumper($ref_array); # 配列のリファレンスの表示内容 print "Dump Array.\n"; print Dumper(@{$ref_array}); # デリファレンスして再初期化する print "Dereference and Initialize Array Again.\n"; @{$ref_array} = qw/A B C D E F G/; print Dumper(@{$ref_array}); # 配列のリファレンスを再初期化する print "Initialize Reference of Array Again.\n"; $ref_array = ['a', 'b', 'c', 'd', 'e', 'f']; print Dumper($ref_array); print Dumper(@{$ref_array});
実行結果。
ARRAY Dump Reference of Array. $VAR1 = [ '1', '2', '3', '4', '5', '6' ]; Dump Array. $VAR1 = '1'; $VAR2 = '2'; $VAR3 = '3'; $VAR4 = '4'; $VAR5 = '5'; $VAR6 = '6'; Dereference and Initialize Array Again. $VAR1 = 'A'; $VAR2 = 'B'; $VAR3 = 'C'; $VAR4 = 'D'; $VAR5 = 'E'; $VAR6 = 'F'; $VAR7 = 'G'; Initialize Reference of Array Again. $VAR1 = [ 'a', 'b', 'c', 'd', 'e', 'f' ]; $VAR1 = 'a'; $VAR2 = 'b'; $VAR3 = 'c'; $VAR4 = 'd'; $VAR5 = 'e'; $VAR6 = 'f';
インスタンス変数の配列を初期化・再初期化を行う
クラス化したモジュール内をインスタンス化し、インスタンス変数内の配列を初期化・再初期化する際の備忘録。
#!/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 ];