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)
| 归档时间: |
|
| 查看次数: |
10438 次 |
| 最近记录: |