The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/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%                         --