这是一个纯粹的Perl参数传递问题。我不能使用Get::Opt
因为它没有安装在每台机器上。
我需要传递带空格和其他特殊字符的参数。演示过程的三个脚本。有更好的方法吗?
[gliang@www stackoverflow]$ perl parameter_wrapper.pl
prep.pl #<5> parameters
prep_v2.pl #<5> parameters
<aaa_777-1>
<bbb-6666-2>
<Incomplete QA>
<-reason>
<too long, mail me at ben@example.com :)>
cat parameter_wrapper.pl
#!/usr/bin/perl -w
use strict;
# call prep.pl with 5 parameters
my $cmd = "./prep.pl aaa_777-1 bbb-6666-2 'Incomplete QA' -reason 'too long, mail me at ben\@example.com :)\n'";
system($cmd);
cat prep.pl
#!/usr/bin/perl -w
use strict;
my @parameters = @ARGV;
my $count = scalar(@parameters);
my @parameters_new = wrap_parameters(@parameters);
my $cmd = "./prep_v2.pl @parameters_new";
print "prep.pl #<$count> parameters\n";
system($cmd);
sub wrap_parameters {
my @parameters = @_;
my @parameters_new;
foreach my $var(@parameters) {
$var = quotemeta($var);
push(@parameters_new, $var);
}
return @parameters_new;
}
cat prep_v2.pl
#!/usr/bin/perl -w
use strict;
my @parameters = @ARGV;
my $count = scalar(@parameters);
print "prep_v2.pl #<$count> parameters\n";
foreach my $var (@parameters) {
#print "<$var>\n";
}
答案 0 :(得分:1)