gpt4 book ai didi

arrays - Perl 如何将数组作为参数传递给另一个 Perl 脚本

转载 作者:行者123 更新时间:2023-12-01 21:54:54 24 4
gpt4 key购买 nike

我有 2 个 perl 脚本,其中 primary_script.pl 将通过将数组作为参数传递来调用 secondary_script.pl 脚本。

我的代码如下所示:
primary_script.pl

#!/usr/bin/perl

use Data::Dumper;
my @array = qw/1 2 3 4 5/;
print Dumper(\@array);

my $arr = \@array;

system("perl secondary_script.pl $arr") ;

print "END\n";


secondary_script.pl

#!/usr/bin/perl

my @var = @{$ARGV[0]};
print @var."\n";

我将数组引用作为参数传递给 secondary_script.pl 并从那里取消引用该数组。这里 @var 打印 0 作为结果,而不是 primary_script.pl 传递的数组内容。

这是将数组作为参数传递给另一个 perl 脚本的正确方法吗?

最佳答案

您可以只传递参数,使用列表形式的 system:

 system $^X, $program_name, @array;

列表形式绕过 shell,因此它不会从您的参数中解释元字符(例如 shell 中的 ;&)。

$^X 是当前运行的 perl 的路径,这可能是您想要的路径,而不是再次搜索 PATH。

让第二个程序按照您的意愿解释您的论点是很复杂的。我在 Quoting the Shell 中介绍了其中的一些内容.

您必须详细说明您正在尝试做什么才能获得更好的建议。

回到你的程序

让我们看看您的程序中的一些其他内容。

在 _secondary_script.pl_ 中,您尝试取消引用参数列表。但是,@ARGV 是一个普通的命名数组。您不需要取消引用它。你可以这样写:

print "@ARGV\n";

将参数列表放在双引号中通过在元素之间放置空格来插入它。那样的话,您就不会在引用上耍花招了。

如果您尝试传递复杂的数据而不是简单的参数,您可以考虑某种序列化(JSON、Sereal 等)并输出到标准输出并从标准输入读取:

use Data::Dumper;
my @array = qw/1 2 3 4 5/;
print Dumper(\@array);

然后,在另一个程序中:

my $input = do { local $/; <STDIN> };
my $array = eval $input;

那个字符串 eval 有点危险(和 so is Perl's Storable ),但就是这个想法。接收一些文本并将其反序列化。

管道数据

然后您可以将这些程序合并到管道中:

 $ perl first.pl | perl second.pl

但是,您也可以通过从第一个程序打开管道直接打印到第二个程序:

use Data::Dumper;
my @array = qw/1 2 3 4 5/;
open my $pipe, '|-', $^X, $other_program;
print {$pipe} Dumper(\@array);

关于arrays - Perl 如何将数组作为参数传递给另一个 Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58435393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com