目前有这个演示代码:
use 5.012;
use Data::Dump;
my $AoH = [
{a => "aval"}, #exactly only one key-value
{b => "bval"}, #for each
{c => "cval"}, #array element
];
dd $AoH;
my @arr = map { each $_ } @$AoH;
dd @arr;
Run Code Online (Sandbox Code Playgroud)
它起作用并产生我想要的结果
[{ a => "aval" }, { b => "bval" }, { c => "cval" }]
("a", "aval", "b", "bval", "c", "cval")
Run Code Online (Sandbox Code Playgroud)
问题是:结构是否正确map { each $_ },还是可以用"另一种方式"来做到这一点?
只需取消引用hashrefs:
my $AoH = [
{a => "aval"}, #exactly only one key-value
{b => "bval"}, #for each
{c => "cval"}, #array element
];
# Flatten the hash refs
my @arr = map { %$_ } @$AoH;
Run Code Online (Sandbox Code Playgroud)
我建议不要each在这种情况下使用.来自perldoc:
从Perl 5.14开始,
each可以使用标量EXPR,该标量必须保持对未经处理的散列或数组的引用.该参数将自动解除引用.这方面each被认为是高度实验性的.在未来的Perl版本中,确切的行为可能会发生变化.