Use XML::Bare unless you have a need for XML::Simple or XML::Twig or XML::Whatever. Bunch of XMLs: -rw-r--r-- 1 okram okram 3843 2009-12-02 06:15 all_skill.xml > time perl -MFile::Slurp -MXML::Bare -E'$a=XML::Bare::xmlin(scalar read_file("xmls/all_skill.xml"));say scalar @{$a->{Results}->{Skill}}' 17 real 0m0.059s user 0m0.030s sys 0m0.000s > time perl -MFile::Slurp -MXML::Simple -E'$a=XML::Simple::XMLin(scalar read_file("xmls/all_skill.xml"));say scalar @{$a->{Results}->{Skill}}' 17 real 0m0.163s user 0m0.140s sys 0m0.030s ===== -rw-r--r-- 1 okram okram 87924 2010-02-11 19:08 all_ritual.xml > time perl -MFile::Slurp -MXML::Bare -E'$a=XML::Bare::xmlin(scalar read_file("xmls/all_ritual.xml"));say scalar @{$a->{Results}->{Ritual}}' 270 real 0m0.055s user 0m0.040s sys 0m0.010s > time perl -MFile::Slurp -MXML::Simple -E'$a=XML::Simple::XMLin(scalar read_file("xmls/all_ritual.xml"));say scalar @{$a->{Results}->{Ritual}}' 270 real 0m0.681s user 0m0.540s sys 0m0.030s ===== -rw-r--r-- 1 okram okram 2765295 2010-02-11 19:08 all_item.xml > time perl -MFile::Slurp -MXML::Bare -E'$a=XML::Bare::xmlin(scalar read_file("xmls/all_item.xml"));say scalar @{$a->{Results}->{Item}}' 7418 real 0m0.223s user 0m0.140s sys 0m0.080s > time perl -MFile::Slurp -MXML::Simple -E'$a=XML::Simple::XMLin(scalar read_file("xmls/all_item.xml"));say scalar @{$a->{Results}->{Item}}' 7418 real 4m9.700s user 4m7.290s sys 0m0.640s FOUR MINUTES vs 0.2 seconds? Updated 20100315 (on another machine) letting XML::Simple use the "faster" XML::LibXML: $ time perl -MFile::Slurp -MXML::Simple -E'$XML::Simple::PREFERRED_PARSER="XML::LibXML::SAX::Parser";$a=XML::Simple::XMLin(scalar read_file("xmls/all_item.xml"));say scalar @{$a->{Results}->{Item}}' 7418 real 0m32.659s user 0m32.338s sys 0m0.260s And using XML::Parser, also "faster": $ time perl -MFile::Slurp -MXML::Simple -E'$XML::Simple::PREFERRED_PARSER="XML::Parser";$a=XML::Simple::XMLin(scalar read_file("xmls/all_item.xml"));say scalar @{$a->{Results}->{Item}}' 7418 real 0m15.530s user 0m15.325s sys 0m0.172s And using XML::Twig, in "simplify" config which gives the same data as XMLin() $ time perl -MXML::Twig -E'$a=XML::Twig->new->parsefile("xmls/all_item.xml")->simplify;say scalar @{$a->{Results}->{Item}}' 7418 real 0m56.200s user 0m55.647s sys 0m0.388s