我需要一个简单的脚本来回显所有给定的选项和值(我不知道潜在的选项会是什么)。 我已经尝试过这样的事情:
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=s
、b=s
等)
您可以编写一个为所有名称提供:s
规范的 GetOptions
版本,但只要您只有单字母参数,简单地使用代码来生成规范会更简单。
my @opt_spec = map "$_:s", 'a'..'z';