久々にPerlで簡単なバッチを書いていた。珍しく配列をごちゃごちゃ操作するような物です。で、配列数も多いので、サブルーチンに渡すごとにコピーを作っていたらパフォーマンスにも影響すると思って、参照渡しを使うようにしました。何故か凄い混乱。Perlのリファレンスとかを理解していないということが、改めて解りました。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @x=(1,2,3,4,5); my @y=(6,7,8,9,10); print '@x'," is \n"; print Dumper(@x),"\n"; func(\@x,\@y); sub func { my ($x,$y) = @_; print '$x'." is \n"; print Dumper($x),"\n"; print '@x'." is \n"; print Dumper(@x),"\n"; }
実行結果は、以下の通り。
@x is $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; $VAR4 = 4; $VAR5 = 5; $x is $VAR1 = [ 1, 2, 3, 4, 5 ]; @x is $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; $VAR4 = 4; $VAR5 = 5;
最初の@xは、いたって普通の配列です。で、次の$xについては、2次元配列で格納されているのかな。で、それを@xとすると普通の配列になる。ちょっとまだ理解不足です。これをさらに渡すと、???となっります。家帰って、ラクダ本でも読もう。