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

Ros*_*ers 19 perl getopt getopt-long

如果我有一个命令行,如:

my_script.pl -foo -WHATEVER
Run Code Online (Sandbox Code Playgroud)

我的脚本知道--foo,我希望Getopt设置变量$opt_foo,但我不知道任何事情-WHATEVER.我如何告诉Getopt解析我告诉它的选项,然后在字符串变量或列表中获取其余参数?

一个例子:

use strict;
use warnings;

use Getopt::Long;

my $foo; 

GetOptions('foo' => \$foo); 

print 'remaining options: ', @ARGV;
Run Code Online (Sandbox Code Playgroud)

然后,发行

perl getopttest.pl -foo -WHATEVER

Unknown option: whatever
remaining options:

DVK*_*DVK 23

您需要通过配置"pass_through"选项 Getopt::Long::Configure("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'
        ];
Run Code Online (Sandbox Code Playgroud)

  • 我发现在perldoc网站上阅读关于一些简洁的选项绝对令人生气,然后回到我的mesosoic公司Perl安装,发现我找到的确切完美选项需要一个磁通电容,或至少CPAN模块升级 (4认同)