久々に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とすると普通の配列になる。ちょっとまだ理解不足です。これをさらに渡すと、???となっります。家帰って、ラクダ本でも読もう。