您可以使用匿名管道,它在 UNIX 和 Windows 上的工作方式相同(我假设您使用的是 Windows,因为start
. 试试这个:
use strict;
use warnings;
my $appl = 'orange';
my @inputarray = ([0,1,2],[3,4,5],[6,7,8]);
我们不需要,您可以使用标量上下文获取数组中元素的数量,或者使用;$count
获取最高索引号$#inputarray
我省略了,start
因为它很难调试(控制台窗口在运行后关闭)。
my $cmd = 'perl child.pl';
open(my $pipe, '|-', $cmd) or
die "Unable to execte $cmd; $!";
使用 Data::Dumper 我们可以添加eval
语句并减少空格的生成:
use Data::Dumper;
local $Data::Dumper::Purity = 1;
local $Data::Dumper::Indent = 0;
my $dat = Data::Dumper->new([\$appl,\@inputarray],
[qw($appl $inputarray)]);
print $pipe $dat->Dump();
close ($pipe);
现在对于读取管道(输入流)的孩子:
use strict;
use warnings;
my ($inp) = <STDIN>;
my ($appl, $inputarray);
eval "$inp";
print "appl = $$appl\n";
使用eval
通常不受欢迎,它可能会带来安全漏洞,因此请小心使用。我认为这里是有道理的。
你的循环有点复杂,有 C 的味道。这些更 Perlish:
for my $ref (@$inputarray) {
for my $ele (@$ref) {
print "$ele "
}
print "\n"
}
YAML 更安全,因为它不需要eval
,但需要安装。