如果我有这样的命令行:
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-无论如何
给
未知选项:任何
其余选项:
最佳答案
您需要通过Getopt::Long::Configure("pass_through");
配置“ pass_through”选项
然后,它支持实际的选项(例如,以“-”开头且没有特殊的“-”定界符表示“真实”选项结尾的内容)。
这是perldoc的报价:
pass_through(默认值:禁用)
未知,模棱两可或选项值无效的选项在@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'
];
关于perl - 使用Getopt解析args时如何允许未定义的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3002062/