#!/usr/bin/perl use strict; use lib "lib"; use warnings; use Benchmark qw(:all); use FindBin; use XML::OPML::LibXML; use XML::OPML; my $file = $ARGV[0] || "presentation.opml"; my $path = "$FindBin::Bin/../t/samples/$file"; cmpthese 1000, { 'XML::OPML' => \&xml_opml, 'XML::OPML::LibXML' => \&xml_opml_libxml, 'XML::OPML::LibXML walkdown' => \&xml_opml_libxml_walkdown, }; sub xml_opml { my $opml = XML::OPML->new; $opml->parse($path); my $text = $opml->{outline}->[0]->{text}; } sub xml_opml_libxml { my $doc = XML::OPML::LibXML->new->parse_file($path); my $text = $doc->outline->[0]->text; } sub xml_opml_libxml_walkdown { my $doc = XML::OPML::LibXML->new->parse_file($path); $doc->walkdown(sub { my $text = $_[0]->text; die }); } __DATA__ Rate XML::OPML XML::OPML::LibXML XML::OPML::LibXML walkdown XML::OPML 85.9/s -- -78% -84% XML::OPML::LibXML 389/s 353% -- -26% XML::OPML::LibXML walkdown 524/s 509% 35% --