我正在尝试使用format=yaml
解析MediaWiki's API输出。我的YAML代码类似于:
use YAML qw(Dump Bless Load);
use YAML::LoadURI;
use YAML::Tag;
my $yaml_hash = LoadURI($wiki_url);
my $id = $yaml_hash->{query}->{namespaces}->[0];
print $id;
这很好,花花公子,但你怎么迭代YAML输出而不用暴力强迫呢?这是明智的,但显然这不起作用。
my $id = $yaml_hash->{query}->{namespaces}-[*]->{id}
这就是YAML output的样子:
---
query:
namespaces:
-
id: -2
case: first-letter
'*': Media
canonical: Media
-
id: -1
case: first-letter
'*': Special
canonical: Special
-
id: 0
case: first-letter
'*':
content:
-
id: 1
case: first-letter
'*': Talk
subpages:
canonical: Talk
-
id: 2
case: first-letter
'*': User
subpages:
canonical: User
-
id: 3
case: first-letter
'*': User talk
subpages:
canonical: User talk
答案 0 :(得分:4)
目标:“赞”$yaml_hash->{query}->{namespaces}-[*]->{id}
- 除了功能
试试这个:
my @ids = map { $_->{id} } @{$yaml_hash->{query}->{namespaces}} ;
然而,for循环可能对很多人来说更清晰。
my @ids;
foreach my $ns ( @{$yaml_hash->{query}->{namespaces}} ){ push @ids, $ns->{id} }
注意我正在进行一般的perl数据结构知识,而不是任何YAML特定的知识。
假设'查询'和'名称空间'是文字;如果这些是参数,那么你需要强制使用额外的for-in或while循环。要迭代哈希,请在keys()
中查找each()
和perldoc perlfunc。