Perl,XML :: Simple,以及令人不安的foreach循环

时间:2011-10-21 01:08:10

标签: xml perl foreach

我是Perl的新手,也是XML::Simple的第一个计时器。

我有一个foreach循环(XML数据已经输入$xmlHash

foreach (@{$xmlHash->{$PROTEIN}->{$PEPTIDE}}) {}

当$ peptide键包含多个肽时,它可以工作90次。然而,蛋白质91(以及之后的许多其他蛋白质)只有一个肽(标量值),导致perl抛出

Not an ARRAY reference at C:\...

使foreach循环与标量$PEPTIDES一起使用的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

请参阅XML::Simple文档中的ForceArray

答案 1 :(得分:2)

使用

XMLin($xml, ForceArray => [ $PEPTIDE ])

for (@{ $xmlHash->{$PROTEIN}->{$PEPTIDE} }) { ... }

可替换地,

sub listify {
   return () if !defined($_[0]);
   return ref($_[0]) eq 'ARRAY' ? @{ $_[0] } : $_[0];
}

for (listify $xmlHash->{$PROTEIN}->{$PEPTIDE}) { ... }