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


フラグ値

すべての perl_call_* 関数のパラメータ flags は、以下に定義するシンボルを 「論理和」で組み合わせて用います。

G_SCALAR
Perl sub をスカラコンテキストで呼び出します。 Perl sub が実際に何を返そうとも、スカラのみが必要と解釈されます。Perl sub がスカラを返したときには、 perl_call_* 関数の返却値は、 `1'`0' になります。 `1' ならば、Perl subが実際に返し た値は、スタックのトップにあります。 `0' ならば、 subdie を呼んだか、 G_DISCARD フラグを設定したことを示します。 Perl sub がリストを返すときにも、 perl_call_* 関数は、 `0'`1' を返します。 `1' であれば、リストの要素の数がスタックの トップに置かれます。実際のリストの値には、アクセスできなくなります。 G_SCALAR は、すべての関数で、デフォルトで設定されているフラグです。
G_ARRAY
Perl sub をリストコンテキストで呼び出します。 perl_call_* 関数からの返却値は、積まれた配列がスタックを何要素使っ たかを示します。
G_DISCARD
Perl sub からの返却値が必要ないときには、このフラグを設定することで、 Perl が自動的に廃棄してくれます。このフラグは、 G_SCALARG_ARRAY よりも優先されます。 このフラグを設定しなかった場合には、一時的な値を明示的に自分で処分する必 要があるかもしれません。詳細は、See section 例 3: スカラを返す,を参照してくだ さい。
G_NOARGS
Perl sub に対して、何の引数も渡さないときには、このフラグを設定すること で、時間を少し稼ぐことができます。これは、Perl sub に対して、新しく @_ を生成しないという効果があります。 言うまでもないことですが、このフラグが指定された場合にも、呼び出された Perl sub からは、上位の Perl sub の @_ をアクセスすることができ ます。この機能は、以下のような perl コードで確かめることができます。
sub fred
  { print "@_\n"  }

sub joe
  { &fred }

&joe(1,2,3) ;
とすると
1 2 3
と表示します。 `joe' に属している配列 @_`fred' か らアクセスしたのです。
G_EVAL
呼び出す Perl sub が、 die を呼んだり、実際に exit するな ど、通常ではない終了の仕方をすることがあり、そのようなイベントを捕捉した いようなときに、このフラグを設定します。 sub の呼び出しを eval {} で囲ったような状態にする働きがあります。 perl_call_* 関数から制御が戻ったときには、通常 Perl スクリプトで 行なうように、変数 $@ をチェックする必要があります。チェックの仕 方については、See section 例 6: G_EVAL を使う,を参照してください。


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

検索式: