我使用 GetOpt 来解析命令行参数。我想添加一个新选项“multi”,它应该得到一个如下所示的字符串:key1=abc,key2=123,key3=xwz
。
我不知道用户想要提供多少个自定义密钥,但他可以提供 minimax5
键。另外,我想将它放在带有键的哈希中。
我正在寻找一种良好而干净的方法来实现它。
对于初学者来说,我想使用--multi {key1=abc,key2=123,key3=xwz}
但由于某种原因,它只能
第一把钥匙key1=abc
。我也尝试过:--multi {key1=abc},{key2=123},{key3=xwz}
但感觉有点乱。我想让用户可以添加参数-
like key1=./some_script.pl --help
。部分代码:
my %arg;
GetOptions(
"multi=s" => \$arg{"multi"},
}
然后我想以某种方式将这些密钥放入哈希中,这样就可以很容易地使用它们。所以我想到使用:$arg{"multi"}{"key3"}
为了得到的值key3
。
我应该如何处理这个功能?最干净的方法是什么?
总结一下:
- 要求用户提供密钥以获得类似情况的最佳方法是什么
key1=abc,key2=123,key3=xwz
,不使用文件(提供选项,而不是以文件方式)?含义 - 作为脚本的用户,您希望如何提供这些字段?
- 如何验证用户提供的密钥少于 5 个?
- 我应该如何解析这些键以及将这些键插入到哈希映射中的最佳方法是什么
multi
key.
预期输出:我想要一个如下所示的哈希:$arg{"multi"}{"key3"}
并返回xwz
.
以下程序从以下位置读取逗号分隔的子选项--multi
命令行上的选项。
#!perl
use strict;
use warnings;
use Data::Dumper;
use Getopt::Long 'GetOptionsFromArray';
my @args = ('--multi', '{key1=abc,key2=123,key3=xwz}', 'some', 'other');
my %arg;
GetOptionsFromArray(
\@args,
"multi=s" => \$arg{"multi"},
);
if( $arg{multi} and $arg{multi} =~ /^\{(.*)\}$/) {
# split up into hash:
$arg{ multi } = { split /[{},=]/, $1 };
};
print Dumper \%arg;
__END__
$VAR1 = {
'multi' => {
'key2' => '123',
'key1' => 'abc',
'key3' => 'xwz'
}
};
该程序使用GetOptionsFromArray
以便于测试。在实际的程序中,你可能会使用GetOptions(...)
,这与GetOptionsFromArray(\@ARGV, ...)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)