如何在嵌套数据结构中迭代数组?

我试图用
format=yaml
解析MediaWiki的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输出的样子:
---
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
    
已邀请:
这是你想要的吗?注意:我没有测试过: 目标:“喜欢”something4ѭ - 除了功能性 试试这个:
my @ids = map { $_->{id} } @{$yaml_hash->{query}->{namespaces}} ;
然而,for循环可能对许多人来说更清晰。
my @ids;
foreach my $ns ( @{$yaml_hash->{query}->{namespaces}} ){ push @ids, $ns->{id} }
注意我正在进行一般的perl数据结构知识,而不是任何YAML特定的知识。 假设'query'和'namespaces'是文字;如果这些是参数,那么你需要强制使用额外的for-in或while循环。对于迭代哈希,在perldoc perlfunc中查找
keys()
each()
。     

要回复问题请先登录注册