木曜日, 2月 19, 2009

Perl学習中 その2

サブルーチンに引数として配列やらハッシュをそのまま渡すと展開されてしまうというのに3時間ハマった。リファレンスとして渡してやる必要があるらしい。
引数として渡されるとき、@_ = (@array, %hash);という風に配列コンテキストで渡るのかな?

ちょっと実験。
%hash = ('key1' => 1, 'key2' => 2);
@array = (7, 8, 9);

@arg1 = (%hash, @array);
@arg2 = (\%hash,\@array);

print "@arg1\n";
print "@arg2\n";

こんなのを書いて実験すると。
$perl test.pl 
key2 2 key1 1 7 8 9
HASH(0x9771088) ARRAY(0x9771108)

どうやら想像通りらしい。

リファレンスを受け取ったサブルーチン側では、デリファレンスしてやる必要があるので、そのあたりで使われる記号が増えるという印象を生むのかな?
改めて自分の作ったサブルーチンを見ると、確かに$記号はやたら使ってるし、デリファレンスの辺りは、一週間前の自分には読めないだろうなとは思う。
ただ、書いているときはそれほど気にならなくて、それよりmyを忘れちゃうことの方が多い。javascriptのvarとか、VBAのDimみたいなものなので、そのうち慣れると信じることにしよう。

あとテストは重要。
詳しくない言語ほどテストの価値は上がるのかも。

0 件のコメント: