Go to the first, previous, next, last section, table of contents.


スタッシュとオブジェクト

スタッシュとは、パッケージ内にある、すべての異なるオブジェクトが入ってい るハッシュテーブル (連想配列) のことです。ハッシュテーブルの個々の 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.

検索式: