如果我有一个命令行,如:
my_script.pl -foo -WHATEVER
我的脚本知道–foo,而我希望Getopt设置变量$ opt_foo,但是我不了解-WHATEVER。我如何告诉Getopt来解析我已经告诉过的选项,然后将其余的参数放在字符串变量或列表中?
一个例子:
use strict; use warnings; use Getopt::Long; my $foo; GetOptions('foo' => \$foo); print 'remaining options: ',@ARGV;
然后,发行
perl getopttest.pl -foo -WHATEVER
给
Unknown option: whatever remaining options:
解决方法
您需要通过Getopt :: Long :: Configure(“pass_through”)配置“pass_through”选项;
然后它支持实际的选项(例如以“ – ”开头的东西,没有特殊的“ – ”分隔符来表示“真实”选项的结束)。
这是perldoc报价:
> pass_through(默认值:disabled)
未知,不明确或提供无效选项值的选项将在@ARGV中传递,而不是标记为错误。这使得可以编写只处理用户提供的命令行参数的一部分的包装器脚本,并将剩余的选项传递给其他一些程序。
这是一个例子
$ cat my_script.pl #!/usr/local/bin/perl5.8 -w use Getopt::Long; Getopt::Long::Configure("pass_through"); use Data::Dumper; my %args; GetOptions(\%args,"foo") or die "GetOption returned 0\n"; print Data::Dumper->Dump([\@ARGV],["ARGV"]); $ ./my_script.pl -foo -WHATEVER $ARGV = [ '-WHATEVER' ];