スカラ変数は、通常、整数、倍精度、ポインタ、リファレンスのいずれか 1 つ の型をとります。Perl は、実際のデータに対して、蓄積されている型から、要 求されている型へ、自動的に変換を行ないます。
ある種のスカラ変数は、複数の型のスカラデータを持つようになっています。た
とえば、変数 $! は、errno の数値としての値と、
sys_errlist[] から取り出した同値な文字列を持っています。
SV に複数のデータ値を入れるようにするには、2 つのことをしなくてはなりま
せん。スカラ型を別に追加するために、sv_set*vルーティンを使用する
こと。それから、フラグを設定して Perlに複数のデータを持っていることを知
らせることです。フラグを設定するための 4 つのマクロは:
SvIOK_on SvNOK_on SvPOK_on SvROK_on
です。使用するマクロは、最初にどの sv_set*v ルーティンを呼ぶのか
に関わってきます。これは、 sv_set*v ルーティンはすべて、特定のデー
タ型のビットだけを設定し、他をクリアしてしまうからです。
たとえば、"dberror" という新しい Perl 変数を作って、エラー値を数値とメッ セージ文字列で持つようにするには、以下のように書きます:
extern int dberror;
extern char *dberror_list;
SV* sv = perl_get_sv("dberror", TRUE);
sv_setiv(sv, (IV) dberror);
sv_setpv(sv, dberror_list[dberror]);
SvIOK_on(sv);
もし、 sv_setiv と sv_setpv の順序が逆であれば、 SvIOK_on マク
ロの代わりに、 SvPOK_on マクロを呼ばなければなりません。
Go to the first, previous, next, last section, table of contents.