Perl、XML::Simple和令人不安的foreach循环

Perl、XML::Simple和令人不安的foreach循环,xml,perl,foreach,Xml,Perl,Foreach,我对Perl真的是个新手,也是第一个尝试Perl的人 我有一个foreach循环XML数据已经输入到$xmlHash中 当$peptide键包含多个肽时,它可以工作90次。然而,蛋白质91和其他许多蛋白质之后只有一个肽和标量值,这导致perl抛出 使foreach循环也能与标量$PEPTIDES一起工作的最佳方法是什么?请参阅XML::Simple文档。使用 XMLin($xml, ForceArray => [ $PEPTIDE ]) for (@{ $xmlHash->{$PR

我对Perl真的是个新手,也是第一个尝试Perl的人

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

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

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

请参阅XML::Simple文档。

使用

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}) { ... }

$xml=XMLin'Pool 1N-1.xml',ForceArray=>[$PEPTIDE];工作完美无瑕。谢谢
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}) { ... }