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


AV を使う

AV を生成して、値を設定するのには、2 つの方法があります。最初の方法は、 単に空の AV を作るものです:

AV*  newAV();

ふたつめの方法は、AV を生成した上で、初期値として SV の値を入れます:

AV*  av_make(I32 num, SV **ptr);

ふたつめの引数は、num 個の SV* の配列を指しています。

いったん、AV が生成されると、AV に対して、

void  av_push(AV*, SV*);
SV*   av_pop(AV*);
SV*   av_shift(AV*);
void  av_unshift(AV*, I32 num);

といった操作が行えます。これらは、 av_unshift を除いては、お馴染 みの演算でしょう。 av_unshift は、配列の先頭に、num 個の undef 値の要素を付け加えます。その後で、(あとで述べる) av_store を使って、新しい要素に値を代入しなければなりません。他に もいくつか関数があります:

I32 av_len(AV*); /* 配列の大きさを返す */
SV** av_fetch(AV*, I32 key, I32 lval);
       /* オフセットが key の位置から値を取り出すが、lval
          がゼロでないとき、値を lval に設定するようだ */
SV** av_store(AV*, I32 key, SV* val);
       /* オフセットが key の位置に val を設定する */
void av_clear(AV*);
       /* すべての要素をクリアするが、配列は残す */
void av_undef(AV*);
       /* 全要素を除去し、配列を未定義にする */

配列変数の名前がわかるのであれば、

AV*  perl_get_av("varname", FALSE);

を使えば、AV へのポインタが得られます。その変数が存在しなければ、NULL を 返します。


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

検索式: