my $p = XML::Parser->new; # needs to be done only once foreach (@list_of_20_000_files) { eval { $p->parsefile($_) }; # creates a new XML::Parser::Expat object if ($@) { print "$_ is bad\n"; } else { print "$_ is good\n"; } }