とりあえず結論。
「リストと配列は違う」
my $ref = [1,2,3,4]; my @arr = wq(1 2 3 4); my $ref2 = \@arr;
上のような書き方はよくするわけだが、そうするとついつい
my $ref = \qw(1 2 3 4);
で配列のリファレンスが得られるような気がしてしまう。
しかし、wq(1 2 3 4) は配列ではない、リストだ。
だから、\qw(1 2 3 4) は (\'1', \'2', \'3', \'4') のように解釈される。
だから、正しい? のは以下ような使い方だ。
my ($ref1, $ref2, $ref3, $ref4) = \qw(1 2 3 4); print $$ref1; print $$ref2; print $$ref3; print $$ref4;
あれおかしいな、じゃあ
my @num = (1,2,3,4); foreach my $num (@num){ print "$num \n"; } foreach my $num (qw(1 2 3 4)){ print "$num \n"; }
上の2つは同じように動作するんだけど……ってなる。
それは foreach (ARRAY){} じゃなくて foreach (LIST){}だから。
だから、当然こんな使い方もできる。
my $list = [132, 44]; for my $str (1..9, @$list, 'a'..'z', 'moge', qw(req e32)){ print "$str\n"; }
Perlの配列 = LISTだと思ってた……
何となくスルーしていたのでメモ。