Thank you. That certainly makes sense. I feel though I should probably back up and clarify the root problem though.
I am working with a collection of PDF files and am using the pdftohtml.exe program to convert the PDF into an XML stream in order to extract text of interest with XML::Twig:
open (my $XML, "-|", "e:\\path\\to\\pdftohtml.exe -xml -zoom 1.4 -stdo
+ut $PDF_FILE") or die "pdftohtml failed:\n$!\n$^E";
my $t = XML::Twig->new(
twig_handlers => {
'/pdf2html/pagetext[(@top >= 180 and @top <= 190) and (@left >
+= 100 and @left <= 111)]' => \&RouteTo,
'/pdf2html/pagetext[(@top >= 215 and @top <= 225) and (@left >
+= 260 and @left <= 270)]' => \&InvoiceSort,
'/pdf2html/page' => sub { $_[0]->purge; 1; }, # free memory af
+ter every page
},
comments => 'drop', # remove any comments
empty_tags => 'normal',# empty tags = <tag/>
);
$t->parse($XML);
close $XML;
The problem is that if I fat-finger the open command (e.g. type "-zom" instead "-zoom" in the command arguments), or if "$PDF_FILE" could not be found, the program merrily continues on its way, unaware that $XML is undefined. I've been working around this by wrapping the "$t->parse" in an eval block to catch this, but I was wondering if there was a better way.