在Perl中,来自以下哈希:
{
'item3' => {
'floors' => [ 'a', 'b', 'c' ]
},
'item1' => [ 'special' ]
'item2' => {
'books' => {
'topics' => [ 'epics' ]
},
'sports' => [ 'tennis' ]
},
'item5' => {
'groups' => {
'teams' => [ 'x', 'y' ]
}
},
'offers' => {
'list' => [ 'bags' ]
}
}
只需解析散列的每个子级别中的最后一个值,它始终是一个数组。
只需列出最终子条目(数组值)。
期望单个数组中的输出:
[ 'a', 'b', 'c', 'special', 'epics', 'tennis', 'x', 'y', 'bags' ]
不知道如何继续....请帮我摆脱这个。
提前谢谢!!!!
答案 0 :(得分:0)
递归假定数据结构仅由哈希和数组组成,而数组元素不是引用,
use strict;
use warnings;
use Data::Dumper;
my %h;
@h{ 1..5 } = (
{ 'item3' => { 'floors' => [ 'a', 'b', 'c' ] } },
{ 'item1' => [ 'special' ] },
{ 'item2' => {
'books' => { 'topics' => [ 'epics' ] },
'sports' => [ 'tennis' ]
}},
{ 'item5' => { 'groups' => { 'teams' => [ 'x', 'y' ] } } },
{ 'offers' => { 'list' => [ 'bags' ] } },
);
print Dumper [ arrvals(\%h) ];
sub arrvals {
my ($ref) = @_;
return ref($ref) eq "ARRAY"
? @$ref
: map arrvals($_), values %$ref;
}