すべての perl_call_* 関数のパラメータ flags は、以下に定義するシンボルを 「論理和」で組み合わせて用います。
perl_call_* 関数の返却値は、
`1' か `0' になります。 `1' ならば、Perl subが実際に返し
た値は、スタックのトップにあります。 `0' ならば、 sub で
die を呼んだか、 G_DISCARD フラグを設定したことを示します。
Perl sub がリストを返すときにも、 perl_call_* 関数は、 `0'
か `1' を返します。 `1' であれば、リストの要素の数がスタックの
トップに置かれます。実際のリストの値には、アクセスできなくなります。
G_SCALAR は、すべての関数で、デフォルトで設定されているフラグです。
perl_call_* 関数からの返却値は、積まれた配列がスタックを何要素使っ
たかを示します。
G_SCALAR や
G_ARRAY よりも優先されます。
このフラグを設定しなかった場合には、一時的な値を明示的に自分で処分する必
要があるかもしれません。詳細は、See section 例 3: スカラを返す,を参照してくだ
さい。
@_ を生成しないという効果があります。
言うまでもないことですが、このフラグが指定された場合にも、呼び出された
Perl sub からは、上位の Perl sub の @_ をアクセスすることができ
ます。この機能は、以下のような perl コードで確かめることができます。
sub fred
{ print "@_\n" }
sub joe
{ &fred }
&joe(1,2,3) ;
とすると
1 2 3と表示します。 `joe' に属している配列
@_ を `fred' か
らアクセスしたのです。
die を呼んだり、実際に exit するな
ど、通常ではない終了の仕方をすることがあり、そのようなイベントを捕捉した
いようなときに、このフラグを設定します。 sub の呼び出しを
eval {} で囲ったような状態にする働きがあります。
perl_call_* 関数から制御が戻ったときには、通常 Perl スクリプトで
行なうように、変数 $@ をチェックする必要があります。チェックの仕
方については、See section 例 6: G_EVAL を使う,を参照してください。
Go to the first, previous, next, last section, table of contents.