use strict; use warnings; use XML::Simple; my $xml_raw = < ... XML_RAW my $data = XMLin($xml_raw, ForceArray => [qw(river fish)], KeyAttr => []); foreach my $Animal (@{$data->{animals}{fish}}) { print <<"*END*"; [ Survey information for: $Animal->{name} ]: Saltwater:$Animal->{saltwater} Freshwater:$Animal->{freshwater} Rivers covered in survey: *END* for (@{$Animal->{river}}) { print $_, "\n"; } print "\n"; }