这是我的Data :: Dumper-> Dumper:
创建的数据结构$VAR1 = {
'name' => 'genomic',
'class' => [
{
'reference' => [
{
'name' => 'chromosome',
'referenced-type' => 'Chromosome'
},
{
'name' => 'chromosomeLocation',
'referenced-type' => 'Location'
},
{
'name' => 'sequence',
'referenced-type' => 'Sequence'
},
{
'name' => 'sequenceOntologyTerm',
'referenced-type' => 'SOTerm'
}
],
}
],
};
(为清晰起见,修剪)
我想在一行中返回对引用下的每个名称值的数组的引用。
目前我有
$class->[0]{reference}[0..3]{name}
但无济于事。
此示例还有四个带有索引0..3的兄弟哈希,如何独立于元素数表示整个数组?
答案 0 :(得分:1)
遗憾的是,没有一种简单的语法可以做到这一点。你必须使用map:
my $array_ref = [
map { $_->{name} } @{ $class->[0]{reference} }
];
然后,如果你转出$ array_ref,你会看到它包含:
$array_ref = [
'chromosome',
'chromosomeLocation',
'sequence',
'sequenceOntologyTerm'
];
如果您需要引用原始字符串(而不是副本),则只需在$_
之前使用反斜杠(因此它在地图中为\$_->{name}
)。
答案 1 :(得分:0)
$class->[0]{reference}
是数组引用,因此您必须使用@{}
取消引用它:
@{$class->[0]{reference}}
是'整个数组',你可以在最后使用切片语法来获取它的一部分:
@{$class->[0]{reference}}[0..3]
从那里你开始使用一系列hashref,所以你必须用for
或map
迭代它。