如何从Getopt::Long哈希规范中访问多选项值?
Perl中Getopt::Long多选项值的正确访问方式
问题背景
我用Getopt::Long模块定义了命令行选项,代码如下:
use Getopt::Long; GetOptions(\%gOptions, "help", "size=i", "filename=s{2}", );
传入的命令行参数为:
--size 200 --filename abc.txt def.txt
尝试用下面的方式从%gOptions哈希中访问filename的多选项值,但无法正常工作:
my @array = $gOptions{filename}; print $array[0]; print $array[1];
同时我不想使用直接将选项映射到单独数组的写法:
"filename=s{2}" => \@filearray, print "$filearray[1];"
请问如何直接从%gOptions哈希中正确访问多选项值?
解决方案
当使用s{2}这类多值选项时,%gOptions里的filename对应的是数组引用,而非直接的数组,必须先解引用才能获取元素:
方式1:解引用后赋值给数组
my @array = @{ $gOptions{filename} }; print $array[0]; # 输出abc.txt print $array[1]; # 输出def.txt
方式2:直接通过引用访问元素
不用额外赋值,直接通过数组引用操作元素:
# 箭头操作符写法 print $gOptions{filename}->[0]; # 输出abc.txt print $gOptions{filename}->[1]; # 输出def.txt # 省略箭头的简化写法(Perl支持) print $gOptions{filename}[0]; print $gOptions{filename}[1];
原因是Getopt::Long处理多值选项时,会自动把多个值打包成数组引用存入哈希对应的键中,直接赋值给数组只会把引用本身当成数组的第一个元素,自然无法正确获取内容。
内容的提问来源于stack exchange,提问作者Cool Camel
相关产品推荐
相关产品推荐

