# read XML file $data = $xml->XMLin($contents, keyattr => {property => 'type'}); # finding protein names @names = (); $names_ref = $data->{entry}->{protein}->{name}; if (ref($names_ref) eq 'ARRAY') ## more than one name { @nameArray = @$names_ref; ## so derefrence to array and step through foreach $nameA_ref (@nameArray) { if (ref($nameA_ref) eq 'HASH') ## it shouldn't be a hash, but sometimes it is { %nameTable = %$nameA_ref; push (@names, $nameTable{"content"}); } else ## it is a friendly scalar { push (@names, $nameA_ref); } } } else ## only one name, so $names_ref is probably a scalar { if (ref($names_ref) eq 'HASH') ## it shouldn't be a hash, but sometimes it is { %namesTable = %$names_ref; push (@names, $namesTable{"content"}); } else ## it is a friendly scalar { push (@names, $names_ref); } }