in reply to deeply nested hashes of arrays of hashes of...

It's a bit hard to decipher your data structure as you have used pre tags instead of code tags (see Markup in the Monastery) but you need to examine it closely and note where you have array references and where you have hash references. To answer your specific question this may help:
my $items = $farmdetails->{FarmRoleSet}{Item}; for my $item (@$items) { next unless $item->{RoleID} == $some_number; my $ExternalIP = $item->{ServerSet}{Item}{ExternalIP}; my $InstanceID = $item->{ServerSet}{Item}{PlatformProperties}{Inst +anceID}; }
When using Data::Dumper you don't need to dereference - print Dumper(@{ ... }) in your example - as Dumper will handle that for you:
print Dumper($farmdetails->{FarmRoleSet}{Item}[0]); print Dumper($farmdetails->{FarmRoleSet}{Item}[0]{ServerSet}); # or better: my $items = $farmdetails->{FarmRoleSet}{Item}; for my $item (@$items) { print Dumper($item); print Dumper($item->{ServerSet}); }