On Monday, 12 March 2012 11:03:52 Fred Moyer wrote:
> I'm not clear on the end user implications of this - how will the
> error be presented now?
The only difference _should_ be like this. Suppose this code:
my $p=APR::Pool->new;
$p->cleanup_register(sub {die \"huhu"});
eval {undef $p};
Now, before the patch $@ would be a simple scalar string containing something
like "SCALAR(0x6375c8)" that is the stringified representation of \"huhu".
That is before the change C<'' eq ref $@> is true.
After the change $@ will contain the reference itself. Thus, C<print $@> will
still print the same string as before except for the trailing " at ... line
...\n" perhaps. But C<print ${$@}> will now print "huhu" and C<'SCALAR' eq ref
$@> is true.
Of course you can also throw other references, hashes, arrays or objects.
In general, I'd see it as a bug to be limited to exception strings only
because an arbitrary XS layer in the call hierarchy unconditionally
stringifies all exceptions.
However, on a second thought, I doubt that we have tests in our test suite
that actually check what happens if a PerlCleanupHandler or a pool cleanup
handler throw an exception. That may be worth some effort to investigate and
implement such tests.
Torsten Förtsch
--
Need professional modperl support? Hire me! (http://foertsch.name)
Like fantasy? http://kabatinte.net
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]