The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
 
use XML::Parser;

use Bench;

binmode(STDOUT, ':utf8');
binmode(STDERR, ':utf8');

my $self = Bench::ExpatHandler->new;

my $parser = XML::Parser::Expat->new;

$parser->setHandlers(
	Start => sub { $self->starthandler(@_) },
	End => sub { $self->endhandler(@_) },
	Char => sub { $self->char_handler(@_) },
);

if(scalar(@ARGV)) {
	my $file = shift(@ARGV);
	die "could not open $file: $!" unless open(FILE, $file);
	$parser->parse(\*FILE);
} else {
	$parser->parse(\*STDIN);
}