- 締切済み
Perl 内で実行される Perlで使用した変数を受け取りたい
No.908814の質問と類似しています。 source.plとdest.plという2つのソースがあったときに、 source.pl側では複数個の引数と共にdest.plを呼び出します。dest.pl側で引数を受け取り、その値を変更します。 変更した引数を再度、source.pl側で利用するというようなことを行いたいです。 Cでいう関数の引数にポインタを渡して、受け側で値を変更するようなイメージです。 条件として戻り値は正常/異常のstatusに利用することと、 dest.plはサブルーチンにはしないということがあります。 ご回答、よろしくお願いします。 -------------------------○ source.pl my $arg = 1; $argを引数にしてdest.plの呼び出し ・ ・ dest.plで変更された$argを使用 -------------------------○ dest.pl $argを受け取り、値を変更する。 いくつかの print ""; ・ ・ $argを戻す。 No.908814で回答を頂いていますが、 違うのは、dest.plでのprint文はまま標準出力として表示し、 最後に結果だけを戻すというように処理したいのです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- www15
- ベストアンサー率54% (6/11)
「参照渡し」のことでしょうか? 例: @x=(1, 5, -2, 8); &change(*x); foreach(@x){ print "$_\n"; } # 配列の値をそれぞれ2乗にする関数 sub change{ local (*arg) = @_; # my ではダメ。 my $i; # 値を2乗する for($i=0; $i<=$#arg; $i++){ $arg[$i]**=2; } } 下のURLも参考にして下さい。
- iichiho
- ベストアンサー率37% (416/1114)
myではなくrequireで呼び出せば、dest.pl内で(local)を使っていない限りはグローバル変数として取り扱えるはずです。
- moon_night
- ベストアンサー率32% (598/1831)
最初の大元の呼び出しのときに my $arg で呼び出すとローカルの変数になるので、 my はつけないで呼び出せば普通にグローバル変数として使用できます。 あとは なんとか.plを呼び出して変数の値を変更すればそのままその変更された値で変数を使用できるかと思います。