プロが教えるわが家の防犯対策術!

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文はまま標準出力として表示し、
最後に結果だけを戻すというように処理したいのです。

A 回答 (3件)

「参照渡し」のことでしょうか?



例:

@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も参考にして下さい。

参考URL:http://tohoho.wakusei.ne.jp/wwwperl1.htm#CallByRef
    • good
    • 0

myではなくrequireで呼び出せば、dest.pl内で(local)を使っていない限りはグローバル変数として取り扱えるはずです。

    • good
    • 0

最初の大元の呼び出しのときに


my $arg
で呼び出すとローカルの変数になるので、
my はつけないで呼び出せば普通にグローバル変数として使用できます。
あとは なんとか.plを呼び出して変数の値を変更すればそのままその変更された値で変数を使用できるかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!