foreach my $dataschema ( values %{ $data->{dataschemas}{dataschema} } ) { while( my ($name, $value) = each %{ $dataschema->{attributes}{attribute} } ){ # do something with the name and value print "\$name is: $name\n\$value is: $value\n"; } }