我有数据转储程序的这个结构:
$VAR1 = {
'field' => [
{
'content' => {
'en' => [
'Footware haberdashery leather goods'
],
'de' => [
'Schuhe Kurzwaren und Lederartikel'
],
'it' => [
'Calzature mercerie e pelletterie'
]
},
'type' => 'tag',
'valore' => 'TAG3'
},
{
'content' => {
'en' => [
'Cobbler'
],
'de' => [
'Schuster'
],
'it' => [
'Calzolai'
]
},
'type' => 'tag',
'valore' => 'TAG24'
}
]
};
我的问题是:如何一对一地获取数据和打印? 我想打印名称,标签和valore。 对于我的软件,必须使用商店名称和更多数据,例如类型
答案 0 :(得分:4)
看起来结构是包含散列的arrayref的hashref,依此类推。显然,你提到“名字”的地方,你的意思是“语言”的“内容”。同样地,似乎你提到“标签”的意思是'类型'。我的答案将基于这些假设。
foreach my $rec (@{$href->{field}}) {
print "$rec->{content}->{en}->[0]: $rec->{type}, $rec->{valore}\n";
}
->
和{content}
之间的{en}
以及{en}
和[0]
之间的print $href->{field}->[0]->{content}->{en}->[0], "\n";
print $href->{field}->[0]->{type}, "\n";
print $href->{field}->[0]->{valore}, "\n";
是可选的,也是风格问题。
如果您只是想直接访问元素(在循环之前),您可以这样做:
foreach my $rec (@{$href->{field}}) {
print $rec->{content}->{$_}->[0], "\n" foreach sort keys %{$rec->{content}};
print $rec->{type}, "\n";
print $rec->{valor}, "\n\n";
}
如果要打印所有语言,可以执行以下操作:
perlreftut
当您学习使用Perl操作引用和数据结构时,有几个Perl文档页面可能对您有用:perlref
,perldsc
和perldoc perlreftut
。例如,以get { return _instance ?? (_instance = new TestClass()); }
从您自己的系统访问它们。