【发布时间】:2016-05-02 11:07:54
【问题描述】:
我有一个关于解析命令行参数和在 Perl 中使用 shift 命令的问题。
我想用这一行来启动我的 Perl 脚本
/home/scripts/test.pl -a --test1 -b /path/to/file/file.txt
所以我想解析命令行参数。这是我执行此操作的脚本的一部分
if ($arg eq "-a") {
$main::john = shift(@arguments);
} elsif ($arg eq "-b") {
$main::doe = shift(@arguments);
}
我想在之后执行的$command 变量中使用这些参数
my $var1=$john;
my $var2=$doe;
my $command = "/path/to/tool/tool --in $line --out $outputdir $var1 $var2";
&execute($command);
现在我遇到了两个问题:
在命令行中指定-a 和-b 不是强制性的。但现在发生的情况是,当我不指定 -a 时,我会收到一条消息,指出我在定义变量的行使用了未初始化的值
第二个问题:$var2 现在将等于 $doe,所以在本例中为 /path/to/file/file.txt。但是我希望$var2 等于--text /path/to/file/file.txt。我应该在哪里指定这个--text。它不能标准地在$command 中,因为当我不指定-b 时它会出现问题。当我定义$doe 时我应该这样做,但是如何呢?
【问题讨论】:
-
perldoc GetOpt::Long
标签: perl