以下のコマンドを使用して、メイン スクリプトから子スクリプトを呼び出しています。
system 1, "perl C:\\test.pl";
上記の子からメイン スクリプトに値を返す方法を知りたいですか? 誰か助けてくれませんか?
代わりに、子 perl をパイプで開き、標準出力に表示される内容を読み取る必要があります。
open(F, "-|", 'perl C:\test.pl') or die;
my $data = <F>; # Gets one line of output.
使用system
するには、パイプまたはソケット接続を自分でセットアップする必要がありますが、これは少し複雑です。または、ファイルを使用してデータを渡します。
親と子が並行して実行されていることを示す小さなテスト。ではchild.pl
、
# Simulate a long computation
for ('a'..'k') {
print STDERR "$_ ";
sleep 1;
}
# This goes to the pipe.
print "Hello world! ";
ではparent.pl
、
open(F, "-|", 'perl child.pl') or die;
# Child is running. Do a long computation in the parent.
for (1..10) {
print STDERR "$_ ";
sleep 1
}
# Now get the final value from the child's pipe.
my $data = <F>;
print STDERR $data;
close F;
それで:
C:\tmp>perl parent.pl
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j k Hello world!