在Perl中传递数组
好吧,我会尽力解释我到目前为止做了什么。我使用Parellel::ForkManager从URL数组中获取数据,然后将其存储在变量(value1、value2、value3)中 然后,我从所有这些进程中收集数据,并使用在Perl中传递数组,perl,Perl,好吧,我会尽力解释我到目前为止做了什么。我使用Parellel::ForkManager从URL数组中获取数据,然后将其存储在变量(value1、value2、value3)中 然后,我从所有这些进程中收集数据,并使用$pm->run\u on\u finish显示数据 #... my $pm = new Parallel::ForkManager(10); $pm->run_on_finish ( sub { my @info = @{$data_structu
$pm->run\u on\u finish
显示数据
#...
my $pm = new Parallel::ForkManager(10);
$pm->run_on_finish (
sub {
my @info = @{$data_structure_reference};
print $info[0];
print $info[1];
print $info[2];
}
);
for my $var (@urls) {
$pm->start and next;
#...
@returned = &something($var);
#...
$pm->finish(0, \@returned);
}
sub something {
#... getting data from each URL and storing it in variables
my @array = (
$value1,
$value2,
$value3
);
return @array;
}
现在,我要做的是传递一个数组,@value4
,然后仅在数组中有内容时显示该数据。所以,我希望它看起来像这样:
sub something {
#... getting data from each URL and storing it in variables
my @array = (
$value1,
$value2,
$value3,
@value4
);
return @array;
}
然后我想让它打印那个数组,只要里面有东西
不幸的是,我不完全确定该如何做。我不完全确定您在问什么,但是为了在Perl中向函数传递多个数组,必须通过引用传递
my @array1 = (1, 2, 3);
my @array2 = ('a', 'b', 'c');
&fn(\@array1, \@array2);
为了仅在数组有值的情况下打印数组,只需检查数组是否有值并打印即可:
print "@array" if @array;
不过,“@array”
的好功能是,如果@array
没有值,则“@array”
的计算结果为”。这使您可以将前面的语句简化为:
print "@array"
我假设您要问的是如何返回一个数组以及从something()
sub返回的三个标量,并将其打印出来
我还假设这三个标量在@info
中被称为存在
在我看来,最简单的方法似乎是简单地将它们固定到您返回的数组的末尾,使用前三个值,如果还剩下什么,也打印出来
$pm->run_on_finish (
sub {
my @info = @{$data_structure_reference};
print splice @info, 0, 3;
print @info if (@info);
}
);
sub something {
return (
$value1,
$value2,
$value3,
@value4
);
}
正如您所注意到的,您不需要为返回值填充虚拟数组,只需在参数内返回值即可。不需要取消对数组的引用,因为如果剪接前三个值,可以直接使用@info
数组
我喜欢简单。如果可行。我之前已经提供了一个解决这个问题的简单方法。它可以使用线程(使用线程;
)或进程(使用forks;
)
子系统中要完成的工作是通过处理请求来完成的
sub process_request {
# ...
return [
$value1,
$value2,
$value3,
\@value4,
];
}
结果将被传递到父级中的过程\u响应
sub process_response {
my ($value1, $value2, $value3, $value4) = @{ $_[0] };
...
}
将数组@value4传递给哪个函数?请澄清。@hexcoder澄清已到达?我认为塞斯皮诺扎的回答很有帮助。我要看看我能用它做些什么。。。然后可能投票/accept@Aelfhere你为什么要为推荐信烦恼呢?使用前三个值,数组中剩下的是@value4
数组中的任何值。@Aelfhere ok,如果答案合适,可以。(对我来说,还不清楚您真正想要什么,但这已经不再相关了)。@hexcoder每个fork运行something()
子命令并获取值,然后将这些值打印在finish()
语句中。他想知道如何通过finish()
语句传递值。这正是我需要的。它的简单性说明了我对lol语言所知甚少。非常感谢+1伟大的原型代码@Aelfhere:使用参考资料更优雅这很好。我可以用TLP的答案来回答这个问题,但只是为了好玩,我玩了你的答案,效果也不错。谢谢@我会记得要优雅。。。将来:)@hexcoder,@Aelfhere,我已经更新了我的代码,这样一来,结果将由父级处理,而不是等待所有的工作完成。(未经测试,与原始代码一样。)
sub process_response {
my ($value1, $value2, $value3, $value4) = @{ $_[0] };
...
}