use warnings; use strict; use XML::Simple; use Data::Dumper; my $xmlSimple = new XML::Simple(KeepRoot => 1); my $professionsXML = $xmlSimple->XMLin("in.xml"); print Dumper($professionsXML); print qq(0.1: $professionsXML->{'profs'}{'name'}\n); print qq(0.2: $professionsXML->{'profs'}{'profcats'}{'name'}\n); foreach my $key (keys %{$professionsXML}) { next if ref $professionsXML->{$key} ne 'HASH'; print qq(1: $key\n); foreach my $key2 (keys %{$professionsXML->{$key}}) { next if ref $professionsXML->{$key}{$key2} ne 'HASH'; print qq(2: $key2\n); foreach my $key3 (keys %{$professionsXML->{$key}{$key2}}) { next if ref $professionsXML->{$key}{$key2}{$key3} ne 'HASH'; print qq(3: $key3\n); foreach my $key4 (keys %{$professionsXML->{$key}{$key2}{$key3}}) { print qq(4: $key4\n); } } } } exit(0);