use strict; use warnings; use XML::Checker::Parser; my %expat_options = ( KeepCDATA => 1, Handlers => {Unparsed => \&my_Unparsed_handler} ); my $parser = new XML::Checker::Parser(%expat_options); open OUT, '>', 'fail.xml'; print OUT < ]> "something should not be here" OUT close OUT; eval { local $XML::Checker::FAIL = \&my_fail; $parser->parsefile("fail.xml"); }; if ($@) { print $@; } else { print "xml has been validated"; } sub my_fail { my $code = shift; die XML::Checker::error_string( $code, @_ ) if $code < 200; XML::Checker::print_error( $code, @_ ); }