Perl, XML :: Простой и тревожный цикл foreach - PullRequest
0 голосов
/ 21 октября 2011

Я действительно новичок в Perl и первый таймер для XML :: Simple .

У меня есть цикл foreach (данные XML уже переданы в $xmlHash)

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

Это работает 90 раз, когда $ пептидный ключ содержит несколько пептидов. Однако белок 91 (и многие другие после него) содержат только один пептид (скалярное значение), который вызывает perl

Not an ARRAY reference at C:\...

Каков наилучший способ заставить цикл foreach также работать со скаляром $PEPTIDES?

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

См. ForceArray в XML::Simple документации.

2 голосов
/ 21 октября 2011

Использование

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}) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...