use strict; use warnings; use Data::Dumper; my $VAR1 = { 'sas_residue_annotation' => [ { 'xmlns' => 'http://www.ebi.ac.uk/WSsas/Schema', 'sources' => [ { 'source' => [ { 'source_name' => [ '1iho' ], 'ref_evalue' => [ '5.5e-50' ], 'ref_overlap' => [ '282' ], 'ref_identity' => [ '47.20' ], 'ref_pmid' => [ '11377204' ] }, { 'source_name' => [ '1mop' ], 'ref_evalue' => [ '8.3e-38' ], 'ref_overlap' => [ '264' ], 'ref_identity' => [ '43.60' ], 'ref_pmid' => [ '12717031' ] }, { 'source_name' => [ '1n2b' ], 'ref_evalue' => [ '8.2e-38' ], 'ref_overlap' => [ '264' ], 'ref_identity' => [ '43.60' ], 'ref_pmid' => [ '12717031' ] }, ], }, ], }, ], }; print Dumper($VAR1); print Dumper($VAR1->{sas_residue_annotation}); print Dumper($VAR1->{sas_residue_annotation}[0]); print Dumper($VAR1->{sas_residue_annotation}[0]{sources}); print Dumper($VAR1->{sas_residue_annotation}[0]{sources}[0]); print Dumper($VAR1->{sas_residue_annotation}[0]{sources}[0]{source}); foreach my $source (@{$VAR1->{sas_residue_annotation}[0]{sources}[0]{source}}) { print "source name: ", join(',',@{$source->{source_name}}), "\n"; }