perl - 使用Getopt解析args时如何允许未定义的选项

标签 perl getopt getopt-long

如果我有这样的命令行:

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/

相关文章:

Perl 在不同情况下找到有效的行对

c - 使用 getopt 向命令行选项提供两个参数

c - Optarg 字符串比较 C

c - C中getopt的错误处理

linux - 打开和编辑文件对另一个文件也有效

linux - 如何将所有隐藏文件夹/文件更改为在多个子目录中可见

php - 一次执行多个命令

c++ - 如何为复杂的命令行选项设计语法?

c++ - getopt_long 行为怪异

无法找出段错误