プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Perlの配列に悩む

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