如何将空参数传递给从主perl脚本[backtics]调用的perl脚本
我想调用一个perl脚本(B.pl),它将通过传递多个可选参数,从主perl脚本(a.pl)列出远程服务器中可用的文件 由于参数是可选的,如果我使用backticks,那么在B.pl中参数被分配到了错误的变量 如果我使用如何将空参数传递给从主perl脚本[backtics]调用的perl脚本,perl,unix,Perl,Unix,我想调用一个perl脚本(B.pl),它将通过传递多个可选参数,从主perl脚本(a.pl)列出远程服务器中可用的文件 由于参数是可选的,如果我使用backticks,那么在B.pl中参数被分配到了错误的变量 如果我使用@list=system(B.pl,argv0,argv1,argv2)然后,尽管某些参数未定义,但在B.pl中正确分配了它,但在调用脚本中,标准输出没有分配给@list 我是perl新手,请在此场景中进行指导。有没有办法用倒勾传递空参数 在A.pl中: my @filelist
@list=system(B.pl,argv0,argv1,argv2)代码>然后,尽管某些参数未定义,但在B.pl中正确分配了它,但在调用脚本中,标准输出没有分配给@list
我是perl新手,请在此场景中进行指导。有没有办法用倒勾传递空参数
在A.pl中:
my @filelist = system( B.pl, $argv0, $argv1, $argv2, $argv3);
my @filelist1 = `B.pl $argv0 $argv1 $argv2 $argv3`;
在B.pl中:
my $loc = uc( $ARGV[0] );
my $msk = uc( $ARGV[1] );
my $usr = $ARGV[2];
my $usr1 = $ARGV[3];
不幸的是,backticks运算符或readpipe
的安全版本不存在。多年来,它一直在perl
待办事项列表中
但您可以使用open
轻松完成这项工作:
open my $handle, '-|', 'B.pl', $argv0, $argv1, $argv2, $argv3
or die "unable to run external command: $!";
my $output = do { local $/; <$handle> };
close $handle
or die "unable to capture output from child command: $!";
$? and die "remote command exited with non zero return code: $?";
打开我的$handle,'-|','B.pl',$argv0,$argv1,$argv2,$argv3
或“无法运行外部命令:$!”;
my$output=do{local$/;};
关闭$handle
或“无法从子命令捕获输出:$!”;
$? 和die“远程命令退出,返回非零代码:$?”;
这不是关于Perl的问题,而是关于shell的问题。您试图传递一组参数,其中一些是可选的。幸运的是,这是一个众所周知的问题。答案是传递命名选项,而不是位置参数。在Perl中实现这一点的标准方法是使用
例如,在B.pl
中,您可以说
use Getopt::Long;
my ($loc, $msk, $usr, $usr1);
GetOptions(
"loc=s" => \$loc,
"msk=s" => \$msk,
"usr=s" => \$usr,
"usr1=s" => \$usr1,
) or die "Something wrong with your options!";
而A.pl
中的调用将为:
my @filelist1 = `B.pl '--loc=$argv0' '--msk=$argv1' '--usr=$argv2' '--usr1=$argv3'`;
还有更复杂的方法。例如,根据,我们了解。您可以使用“零长度字符串”(”
或”
)作为背面记号内的参数:
perl -e "print `perl -e 'print $ARGV[2]' 0 '' 2`"
或使用perl模块处理命令行选项,例如Getopt::Std系统
返回被调用方的退出值,不显示它打印的内容。请显示您如何调用<代码> B.pl < /C> >以及如何分配它接收的参数。您应该考虑使用<代码> -名称Value/Cult>符号作为可选参数,并使用GETPop::Load解析命令行。哦,嘿,这完全有效。没关系,这比我的答案要好得多。@darch,我不同意。使用开关是更好的选择args@darchIMHO命令行开关是非微小和非短维护跨度脚本的更好选择。