スタッシュとは、パッケージ内にある、すべての異なるオブジェクトが入ってい るハッシュテーブル (連想配列) のことです。ハッシュテーブルの個々の key は、(同じ名前のすべての異なる型のオブジェクトで共有される) シンボル名で、 ハッシュテーブルの個々の value は、(グローバル値のための) GV と呼ばれま す。GV には、
を含む (これらに限りませんが)、その名前の様々なオブジェクトへのリファレ ンスが次々に入ることになります。
Perl は、(グローバル変数のための) GV 構造体に様々なスタッシュを入れます が、それらは、HV 構造体で表されます。
特定のパッケージの HV ポインタの入手には、
HV* gv_stashpv(char* name, I32 create) HV* gv_stashsv(SV*, I32 create)
という関数を使います。最初の関数が、リテラル文字列をとり、二番目が SV に 入れた文字列を使います。
gv_stash*v
が使う name は、シンボルテーブルを手に入れようとするパッ
ケージの名前です。デフォルトのパッケージは、`main' というものです。
多重にネストしたパッケージであれば、Perl での場合と同様に、:: で区切って
gv_stash*v に名前を渡すのが正しい方法です。
もし、bless
されたリファレンスである SV があれば、
HV* SvSTASH(SvRV(SV*));
を使っても、スタッシュポインタを探すことができ、パッケージ名自身は、
char* HvNAME(HV* stash);
で得られます。
Perl スクリプトへ bless
された値を返す必要があれば、
SV* sv_bless(SV*, HV* stash)
という関数が使えます。最初の引数 SV* は、リファレンス、二番目の引数がス タッシュです。返された SV* は、他の SV と同様に使うことができます。
Go to the first, previous, next, last section, table of contents.