HV を生成するには、
HV* newHV();
というルーティンを使います。いったん、HV が生成されると、HV に対して、
SV** hv_store(HV*, char* key, U32 klen, SV* val, U32 hash); SV** hv_fetch(HV*, char* key, U32 klen, I32 lval);
という操作が行えます。引数 klen は、渡される key の長さです。引 数 val は、設定されるスカラへの SV ポインタを入れ、hash は、あら かじめ計算したハッシュ値 (hv_store に計算させる場合には、ゼロ) です。引 数 lval で、このフェッチ操作が、実はストア操作の一部であるかを示しま す。
hv_store
や hv_fetch
は、SV** を返すもので、SV* ではないこ
とに注意してください。スカラ値をアクセスするには、まず返却値を被参照する
必要があります。しかし、その前に返却値が NULLでないことを確認すべきです。
ハッシュテーブルのエントリが存在するかをチェックし、削除する関数がありま す。
bool hv_exists(HV*, char* key, U32 klen); SV* hv_delete(HV*, char* key, U32 klen);
そして、その他の諸々の関数:
void hv_clear(HV*); /* ハッシュテーブルのすべてのエントリをクリアする */ void hv_undef(HV*); /* ハッシュテーブルを未定義にする */ I32 hv_iterinit(HV*); /* ハッシュテーブルを走査する開始点を準備する */ HE* hv_iternext(HV*); /* 次のエントリを取り出し、key と value が入った 構造体へのポインタを返す */ char* hv_iterkey(HE* entry, I32* retlen); /* HE 構造体から key を取り出し、また、key 文字 列の長さを返す */ SV* hv_iterval(HV*, HE* entry); /* HE 構造体の value への SV ポインタを返す */
ハッシュ変数の名前がわかるのであれば、
HV* perl_get_hv("varname", FALSE);
を使うことで、HV へのポインタが得られます。その変数が存在しなければ、 NULL を返します。
(興味ある方のために、) ハッシュのアルゴリズムは、
i = klen; hash = 0; s = key; while (i--) hash = hash * 33 + *s++;
となっています。
Go to the first, previous, next, last section, table of contents.