如何不使用中间变量临时将Perl哈希转换为数组?
Perl哈希直接转为数组引用(无需中间变量)
问题背景
现有代码通过中间变量@arr将哈希转换为数组,再通过数组引用判断类型:
my %scientists = ( "Newton" => "Isaac", "Einstein" => "Albert", "Darwin" => "Charles", ); my @arr = %scientists; print $_ . " " foreach @arr; # 输出 Newton Isaac Darwin Charles Einstein Albert print ref(\@arr); # 输出 ARRAY
希望找到替代语法,不使用中间变量,直接将哈希转为数组引用,让ref(...)输出ARRAY。
解决方案
直接使用Perl的**匿名数组构造器[ ]**包裹哈希即可,Perl会自动将哈希展开为键值对序列并存入匿名数组,返回的就是数组引用。
示例代码
my %scientists = ( "Newton" => "Isaac", "Einstein" => "Albert", "Darwin" => "Charles", ); # 直接生成数组引用并判断类型 print ref( [ %scientists ] ); # 输出 ARRAY # 直接遍历临时数组引用的元素 print $_ . " " foreach @{ [ %scientists ] }; # 输出 Newton Isaac Darwin Charles Einstein Albert
原理说明
[ %scientists ]会创建一个临时匿名数组,哈希会被Perl自动展开为(键1, 值1, 键2, 值2, ...)的列表形式,填充进这个匿名数组。- 构造器返回的是该匿名数组的引用,因此
ref()会识别为ARRAY类型,完全不需要中间变量存储转换后的数组。
内容的提问来源于stack exchange,提问作者Talespin_Kit
相关产品推荐
相关产品推荐

