fred has asked for the wisdom of the Perl Monks concerning the following question:

For testing, I'm using a form to POST XML to a CGI handler. While developing this, I ran into some problems. It seems that use CGI::Carp 'fatalsToBrowser' is incompatible with XML::Parser. Or maybe I'm making a mistake.

Try this code:

use XML::Parser; use CGI; use CGI::Carp 'fatalsToBrowser'; my $p1 = new XML::Parser(Style => 'Debug'); $p1->parse('<foo id="hi">Hello world</foo>');

Although the parse seems to go fine, CGI reports that a software error occured. Specifically, "Can't use string ("<foo id="hi">Hello World</foo>") as a symbol ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.6.0/i386-linux/XML/Parser/Expat.pm line 456"

If you comment out the 'fatalsToBrowser' line, everything works fine. Is XML::Parser/expat throwing a die call even on a successful parse? Is the parse failing? Am I doing something dumb?

Replies are listed 'Best First'.
Re: XML::Parser and CGI 'fatalsToBrowser' incompatible?
by thraxil (Prior) on Jul 27, 2001 at 22:08 UTC

    yes, you've got it. the problem seems to be that CGI::Carp doesn't properly localize $SIG{__DIE__}.

    drove me nuts when i ran into this too. i haven't seen any solution other than just not using fatalsToBrowser in any code that uses XML::Parser.

    anders pearson

      I believe that this problem is fixed by newer releases of CGI::Carp by having the __DIE__ handler (ack, pfft) check $^S. My version of CGI::Carp is 1.14 and it does this.

              - tye (but my friends call me "Tye")