gpt4 book ai didi

perl - 使用 Getopt::Long 解析参数的最简洁方法

转载 作者:行者123 更新时间:2023-12-02 20:11:10 25 4
gpt4 key购买 nike

我使用 GetOpt 来解析命令行参数。我想添加一个新选项“multi”,它应该得到一个如下所示的字符串:key1=abc,key2=123,key3=xwz。我不知道用户想要提供多少个自定义键,但他可以提供 minimax 5 键。另外,我想将它放在带有键的哈希中。我正在寻找一种良好且干净的方法来实现它。

对于初学者,我想过使用 --multi {key1=abc,key2=123,key3=xwz} 但由于某种原因,它只能第一个键key1=abc。我还尝试过: --multi {key1=abc},{key2=123},{key3=xwz} 但感觉有点困惑。我想让用户可以使用 - 添加参数,例如 key1=./some_script.pl --help。部分代码:

my %arg;
GetOptions(
"multi=s" => \$arg{"multi"},
}

然后我想以某种方式将这些 key 放入散列中,这样就可以很容易地使用它们。所以我想到使用: $arg{"multi"}{"key3"} 来获取 key3 的值。我应该如何处理这个功能?最干净的方法是什么?

总结一下:

  1. 在不使用文件的情况下,要求用户提供 key 以获得与 key1=abc,key2=123,key3=xwz 类似的情况的最佳方式是什么(提供选项、不是以文件方式)?含义 - 作为脚本的用户,您希望如何提供这些字段?
  2. 如何验证用户提供的 key 少于 5 个?
  3. 我应该如何解析这些键,以及将这些键插入 multi 键中的 HashMap 的最佳方式是什么。

预期输出:我想要一个如下所示的哈希:$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, ...) 相同。

关于perl - 使用 Getopt::Long 解析参数的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com