#!/usr/bin/perl -- use strict; use warnings; use XML::SAX; use Module::Load qw/ load /; my @files = ( ... ); my $parsers = XML::SAX->parsers(); for my $parser ( @$parsers ){ load( $parser->{Name} ); print "\n$parser->{Name}\n"; for my $file ( @files ){ $parser->{Name}->new( Handler => MySAXHandler->new, )->parse_file( $file ); } } package MySAXHandler; use base qw( XML::SAX::Base ); use Data::Dump qw/ pp /; sub start_document { _pper('doc', @_ ) } sub start_dtd { _pper('dtd', @_ ) } sub xml_decl { _pper('decl', @_ ) } sub _pper { my ($name, $self, $doc) = @_; print " $name ", pp( %$doc ), "\n"; } __END__ XML::SAX::Expat doc ("Version", "1.0", "Encoding", "UTF-8", "Standalone", "") doc ("Version", "1.0", "Encoding", "ISO-8859-1", "Standalone", "") doc () XML::LibXML::SAX::Parser doc () decl ("Version", "1.0", "Encoding", "UTF-8") doc () decl ("Version", "1.0", "Encoding", "ISO-8859-1") doc () decl ("Version", "1.0", "Encoding", undef) XML::LibXML::SAX doc () decl ("Version", "1.0") doc () decl ("Version", "1.0", "Encoding", "ISO-8859-1") doc () decl ("Version", "1.0")