0

我需要一个简单的脚本来回显给定的所有选项和值(而且我不知道潜在的选项会是什么)。我已经尝试过这样的事情:

use Getopt::Long qw(GetOptionsFromArray);

my %options;

my @opt_spec = qw(a:s b:s c:s d:s e:s f:s g:s h:s i:s j:s k:s l:s m:s n:s o:s p:s r:s q:s r:s s:s t:s u:s v:s w:s x:s y:s z:s);

Getopt::Long::GetOptions(\%options, @opt_spec);

但我仍然必须指定所有可能的选项 - 有没有办法在不提前知道我将收到什么选项的情况下获取所有键/值对?

4

2 回答 2

4

Getopt::Long支持的不仅仅是键值对:可否定选项、具有多个或散列值的选项、递增选项、单字符和捆绑选项。如果没有给出确切的方案Getopt::Long,就无法猜测您想要使用的模块的确切功能,所以它似乎不是完成这项任务的工具。

你可能想要Getopt::Whatever

于 2012-06-29T19:10:34.293 回答
2

你确实需要一个规格。如果您没有规范,则无法知道

-a=-b -c -d -e -f g --h -- -i -j

应该给

my %options = (
    'a' => '-b',
    'c' => '',
    'd' => '',
    'e' => '',
    'f' => 'g'
    'h' => '',
);
@ARGV = (
   '-i',
   '-j',
);

代替

my %options = (
    'a' => '-b',
    'c' => '-d',
    'e' => '-f',
    'h' => '--',
    'i' => '-j'
);
@ARGV = (
    'g',
);

(后者使用a=s,b=s等)

您可以编写一个版本GetOptions,为所有名称提供:s规范,但只要您只有单字母参数,简单地使用代码生成规范会更简单。

my @opt_spec = map "$_:s", 'a'..'z';
于 2012-06-29T19:20:40.497 回答