Arrays 将Perl数组传递给bash脚本

Arrays 将Perl数组传递给bash脚本,arrays,bash,perl,soap,Arrays,Bash,Perl,Soap,我正在尝试使用Perl脚本连接Footprints API。我使用Perl是因为这是Footprints API将使用的少数语言之一 我希望这个Perl脚本从封装外形收集数据,将数据放入一个数组中,然后将该数组传递回调用它的shell脚本 如何将数组从Perl脚本传递到bash脚本 下面是用于连接Footprints API和收集数据的模板 模板: use strict; use SOAP::Lite; my $USE_PROXY_SERVER = 1; my $soap = new SO

我正在尝试使用Perl脚本连接Footprints API。我使用Perl是因为这是Footprints API将使用的少数语言之一

我希望这个Perl脚本从封装外形收集数据,将数据放入一个数组中,然后将该数组传递回调用它的shell脚本

如何将数组从Perl脚本传递到bash脚本

下面是用于连接Footprints API和收集数据的模板

模板:

use strict;

use SOAP::Lite;

my $USE_PROXY_SERVER = 1;

my $soap = new SOAP::Lite;

$soap->uri( 'http://fakeserver.phoneycompany.com/MRWebServices' );

if ( $USE_PROXY_SERVER ) {
    $soap->proxy(
        'http://fakeserver.phoneycompany.com/MRcgi/MRWebServices.pl',
        proxy => ['http' => 'http://localhost:8888/'] );
}
else {
    $soap->proxy( 'http://fakeserver.phoneycompany.com/MRcgi/MRWebServices.pl' );
}

my $soapenv = $soap->MRWebServices__search(
    'WebServices',
    'fakepassword',
    '',
    "select mrID, mrTITLE from MASTER78 WHERE mrTITLE LIKE '%of%'"
);

my $result;

if ( $soapenv->fault ) {
    print ${$soapenv->fault}{faultstring} . "\n";
    exit;
}
else {
    $result = $soapenv->result;
}

my @result_list = @{$result};

for ( my $i = 0; $i <= $#result_list; $i++ ) {

    print "RESULT $i\n";

    my $hash_ref = $result_list[$i]; 

    foreach my $item ( keys %{$hash_ref} ) {
        my $val = $hash_ref->{$item};
        print "$item = '$val'\n";
    }

    print "---------------------\n";
}
在模板中,我认为它只是将键/值对打印到stdout

我是Perl新手,只使用它来搜索Footprints API。我不确定您是否可以用bash脚本从stdout中捕获数据,或者我是否必须创建数组或数组的字符串表示并返回该数据

在我的bash脚本中,我将把Perl脚本的结果分配给变量VAR=Perl Perl_script.pl。但我不知道如何对数组执行该操作,这就是为什么我要考虑数组的字符串表示,将其分配给变量,然后在bash中解析它


我不知道如何在Perl中设置它,所以我需要帮助。

简单的回答是-不能在程序之间传递数据结构

您可以只传递文本和二进制内容,但我建议您不要在这里这样做

最简单的方法之一是使用现有的数据交换格式,如JSON:

use JSON;
print to_json(\@result_list); 
然后在bash脚本中手动解码JSON表单


或者你知道,用perl做所有的工作。没什么不同

一般来说,可能在这个特定的例子中,我会选择在X中完成所有工作,X比shell更高级,但我不得不做一两次。主要是因为我正在设置一个交互式shell环境

最后,我做的事情与像这样的工具一样:构建shell命令,使环境按预期设置,然后让父shell对其求值,例如:

eval$perl perl_script.pl

只是要注意确保每个单独的命令都被;因为\n的通常是压扁的


另一种选择,我不太喜欢,但我在为Windows批处理文件生成变量时使用过,就是将其输出到一个新文件,并允许父批处理文件调用它,或者在shell中,将其作为源文件。如果可以避免使用临时文件,我就不太喜欢它们,尽管它可以让调试变得更容易。

如果你有Perl的强大功能,为什么还要使用bash呢?只是因为我不懂Perl,也知道bash,但我开始认为如果我教自己一些基础知识并尝试一下,它会工作得更好