Perl参数传递特殊字符

时间:2015-12-23 18:35:45

标签: perl

这是一个纯粹的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";
}

1 个答案:

答案 0 :(得分:1)

自从Perl 5于1994年首次发布以来,Getopt :: Long已经成为Perl核心的一部分。你确定它在你想要部署的机器上不可用吗?在您的评论中,您将其称为&#34; Get :: Opt&#34;,那么您在检查机器时是否犯了错误?