Arrays 将Perl数组传递给bash脚本
我正在尝试使用Perl脚本连接Footprints API。我使用Perl是因为这是Footprints API将使用的少数语言之一 我希望这个Perl脚本从封装外形收集数据,将数据放入一个数组中,然后将该数组传递回调用它的shell脚本 如何将数组从Perl脚本传递到bash脚本 下面是用于连接Footprints API和收集数据的模板 模板: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
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,但我开始认为如果我教自己一些基础知识并尝试一下,它会工作得更好