FAQ
So, new problem I have found based on the change to restoring $@, $!, and
$?.

perl-bleads ext/XS-APItest/t/svpeek.t has 2 test failures.

One tests $! and it *looks like* it assumes something recently looked at $!
from a string context:

like (DPeek ($!), qr'^PVMG\("', '$!');


I can fix the test like this:

   # This tests expects that $! will have been used as a string recently.
my $foo = "$!";
like (DPeek ($!), qr'^PVMG\("', '$!');

The other checks $? and *looks like* it verifies it has not been looked at
by anything:

if ($^O eq 'VMS') {
# VMS defines COMPLEX_STATUS and upgrades $? to PVLV
is (DPeek ($?), 'PVLV()', '$?');
} else {
is (DPeek ($?), 'PVMG()', '$?');
}

This can be fixed by a similar trick (not tested in vms as I have no vms
system):

if ($^O eq 'VMS') {
local $?; # Reset anything Test::* has done to it.
# VMS defines COMPLEX_STATUS and upgrades $? to PVLV
is (DPeek ($?), 'PVLV()', '$?');
} else {
local $?; # Reset anything Test::* has done to it.
is (DPeek ($?), 'PVMG()', '$?');
}

This was never a problem when we localized $! and $@. But now that we are
reading the current value, then restoring it, we no longer preserve the
internals of the variables, just the surface values.

This is the only test I have found broken by this. A test in the perl test
suite itself. I have not found anything on cpan broken by this, but my
testing is not a full smoke.

I am just reaching out to see if anyone predicts this is an *actual*
problem? Is it just as simple as updating the 1 failing test and calling it
good, or is this actually a scary thing? If it is scary, then I would love
pointers on how I can actually preserve the internal state of the variables
as well as their value, but I would really prefer not to do that if I do
not have to.

-Chad
On Mon, Jan 18, 2016 at 12:39 AM, Aristotle Pagaltzis wrote:

* Chad Granum [2016-01-18 06:55]:
Which behavior do you want, preserve one, preserve all, preserve what
is requested in arguments?
I didn’t consider that. I was thinking ->release would take an optional
bool flag and that’s all. But you’re right that this would not be enough
and that providing enough interface to cover all the cases makes it too
complicated to be worth it.
my $err = $@;
$ctx->release();
$@ = $err;
Heh, which implies an obvious and amusing improvement:

{ local $@; $ctx->release }

Which is *easier* than any special interface, too. So, scrap that.

Regards,
--
Aristotle Pagaltzis // <http://plasmasturm.org/>

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 27 of 28 | next ›
Discussion Overview
groupcpan-workers @
categoriesperl
postedJan 12, '16 at 12:53a
activeJan 18, '16 at 10:52p
posts28
users8
websitecpan.org

People

Translate

site design / logo © 2018 Grokbase