[注意:この節で記述する機能は Perl 5 でもちゃんと動作しますが、一般的には 新規に追加されたリファレンス機能の方が扱いやすいでしょう。 See section リファレンスとデータ構造のネスト, を参照してください。]
配列のローカルなものではなく、グローバルなものの変更ができるように、配列 の値ではなく、名前を渡したいようなことがあるでしょう。Perl では、名前の 前にアスタリスクをつけて、`*foo' のようにして、特定の名前のすべての オブジェクトを参照することができます。先頭のアスタリスクは、変数やサブルー ティンに付ける記号すべてにマッチする、ワイルドカードのように考えることが できますから、よく「型グロブ」とよばれます。
型グロブは評価されると、その名前のすべてのオブジェクト (これには、ファイ ルハンドル、フォーマット、サブルーティンなども含まれます) を参照するスカ ラ値となります。代入されると、指定された名前で、"*" 値に代入されたものを 参照するようになります。例:
sub doubleary { local(*someary) = @_; foreach $elem (@someary) { $elem *= 2; } } doubleary(*foo); doubleary(*bar);
スカラ値は、サブルーティンに対して、すでにリファレンスとして渡されていま
すから、この機能を使わなくても、明示的に $_[0]などを参照して、スカラ引数
を修正することができます。配列の要素をすべてスカラとして渡すことで、その
全部の要素を変更することができますが、push
、pop
や配列の大
きさを変えるなどの操作には、* の機能 (あるいは同等のリファレンスの機能)
を使う必要があります。型グロブ (やリファレンス) を渡す方が確実に速くなり
ます。
配列を変更したい場合でなくても、1 つの LIST のなかで、複数の配列を渡した いときなどに、この方法が役に立ちます。通常は、LIST のしくみによって、配 列の値がつなげられていまうので、配列を個々に取り出すことができなくなって しまうからです。
Go to the first, previous, next, last section, table of contents.