SPUG: can't die() from XML::Parser handlers?

Jason Lamport jason at strangelight.com
Fri Sep 14 23:48:53 CDT 2001


I've discovered what I consider very strange behaviour in XML::Parser:

I'm using the 'Subs' style of parsing, like this:


use XML::Parser;

# ....

	my $parser = new XML::Parser(
		Style => 'Subs',
		Pkg => 'my_Handlers',
	);
	$parser->parsefile( $SOME_XML_FILE );
#....

package my_Handlers;

sub table {
	my $table_id;

	# ... some stuff to find the "id" attribute

	die( "table must have an id attribute" ) unless defined $table_id;

	# ... more stuff
}

__END__

Now, it turned out that due to an error in the XML file, $table_id 
was in fact undef inside table().  The weird thing is that the die() 
call isn't causing the program to die:  it just exits the handler but 
keeps on going parsing the XML file as if nothing had happened.  I 
can only assume that XML::Parser is calling the handlers from inside 
an eval block (which would make sense) and then ignoring the error 
messages (which doesn't make any sense at all).

I don't get it.  Is this a bug or some sort of feature that I'm 
understanding?  How can I get the handlers to raise a fatal 
exception? (Of course I can think of  plenty of kludgey work-arounds, 
but nothing elegant.)

-jason

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://zipcon.net/spug/





More information about the spug-list mailing list