スカラ変数は、通常、整数、倍精度、ポインタ、リファレンスのいずれか 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.