Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Silencing warnings inside C/XS

by Tanktalus (Canon)
on Oct 10, 2012 at 16:36 UTC ( #998256=note: print w/ replies, xml ) Need Help??

in reply to Silencing warnings inside C/XS

First off, just a disclaimer: I run my production code with use warnings FATAL => 'all'; (or an equivalent). A bit of a masochist, I suppose I am.

Now, with that said, how do I deal with valid undefs? I check if they're defined before I use them. So, my recommendation for your XS code? Check if they're defined before you use them ;-) I'm sure there's some sort of SvOK() or something that will tell you this.

Ok, so let's say you want another work around. My experience with just such an annoying undefined message coming from JSON::XS is that you need to say "no warnings 'uninitialized';" outside the function call. So I have code like this:

{ no warnings 'uninitialized'; $text = $json->encode($object); }
That wrapper alluded to by the anonymous monk would work here. But it's not nearly so ugly as that because this is perl, and we can do wonderful things. Wonderful, horrible things. Well, they'd be horrible in other languages, but I use them a lot in perl.
use Sub::Name; for my $f (@wrapper_funcs) { my $xs = $f . 'XS'; *$f = subname $f => sub { no warnings 'uninitialized'; &$xs; # @_ gets passed along automatically }; }
(The "subname $f =>" bit is optional, but can help with backtraces.)

Comment on Re: Silencing warnings inside C/XS
Select or Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://998256]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (8)
As of 2014-08-23 16:03 GMT
Find Nodes?
    Voting Booth?

    The best computer themed movie is:

    Results (174 votes), past polls