連想配列(ハッシュ)の実体と参照

http://d.hatena.ne.jp/Bayside/20080430/p1
より。

なるほど、Perl の記号の違いがようやく分かってきた。
なぜ連想配列の変数に値を代入しする場合、右辺は波括弧"{}"ではなく丸括弧 "()" を使うのか、ずっと疑問に思っていたけれど、"%"記号で始まる左辺(連想配列)に丸括弧"()"で表す右辺(配列)のデータをペアでコピーしているようなものだったんだ。もし、右辺が変数の場合は"@"記号から始まる変数名を指定する。
ペアを表すのに "=>" を使うわけだが、 "," でも同じ意味になる。

 my %hash = @array; # または、('key1', 'value1', 'key2', 'value2')

一方、参照渡しをするときは、"$"記号で始まる左辺、スカラー変数(でいいのかな?)に波括弧"{}"で表す右辺(連想配列)のポインタを渡していことになる。もし、右辺が変数の場合は、"\%"から始まる変数名を指定する。

 my $ref = \%hash; # または、{'key1' => 'value1', 'key2' => 'value2'}

う〜む・・・とても複雑。実体が生成されるタイミングが分かりにくい・・・。