在Perl中使用Getopt::Long
模块解析命令行选项时,可以通过以下方式访问子选项(嵌套选项)的值:
Getopt::Long
是Perl标准库中用于解析命令行参数的模块,支持复杂选项结构(包括子选项)。子选项通常通过=
或空格分隔的键值对实现。
use Getopt::Long;
my %options;
GetOptions(
"main=s" => \$options{main}, # 主选项
"sub=s%" => \$options{sub}, # 子选项(哈希引用)
"config=s@" => \$options{config}, # 数组型子选项
) or die "Error in command line arguments\n";
# 示例命令行调用:
# script.pl --main=value --sub key1=val1 --sub key2=val2 --config a.conf --config b.conf
# 访问子选项值
print "Main option: $options{main}\n";
print "Sub-option key1: $options{sub}{key1}\n" if exists $options{sub}{key1};
print "Config files: ", join(", ", @{$options{config}}), "\n";
use Getopt::Long;
my %sub_options;
GetOptions(
"sub=s" => sub {
my ($name, $value) = @_;
my ($key, $val) = split /=/, $value, 2;
$sub_options{$key} = $val if defined $val;
}
);
# 示例调用: script.pl --sub param1=value1
print "Sub-option param1: $sub_options{param1}\n";
s%
)
通过%
符号声明,自动将key=value
格式的参数解析为哈希键值对。s@
)
通过@
符号声明,允许重复选项值存储为数组。%
或@
符号声明选项类型s%
(哈希)或s@
(数组)# 命令行调用: script.pl --sub "special=value with spaces"
GetOptions("sub=s%" => \my %opts);
# 此时 %opts 会自动处理引号内的内容
完整文档参考:perldoc Getopt::Long