如何在没有参数特定知识的情况下从 Getopt Long 获取所有选项



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

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);

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

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

您可能需要Getopt::Whatever

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

-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=sb=s等)

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

my @opt_spec = map "$_:s", 'a'..'z';

最新更新