develooper Front page | perl.perl6.language | Postings from April 2005

Re: turning off warnings for a function's params?

Thread Previous | Thread Next
From:
Piers Cawley
Date:
April 27, 2005 14:39
Subject:
Re: turning off warnings for a function's params?
Message ID:
m2ll7399wg.fsf@obelisk.bofh.org.uk
David Storrs <dstorrs@dstorrs.com> writes:

> I image we've all written logging code that looks something like this
> (Perl5 syntax):
>
>   sub foo {
>       my ($x,$y) = @_;
>       note("Entering frobnitz().  params: '$x', '$y'"); 
>       ...
>   }
>
> This, of course, throws an 'uninitialized value in concatenation or
> string' warning when your test suite does this:
>
>   is( foo(undef, undef), undef, "foo(undef, undef) gives undef" );
>
> In a testing environment, I don't want to see this warning. 
>
> In a
> production environment, I do.  Furthermore, when I want it gone, I
> want it gone from every instance of C<note>, without having to change
> something in every location.  I suppose I could change all my logging
> calls to look like this:
>
>   {
>     if ( $DEBUG ) { no warnings 'uninitialized'; note("...."); }
>     else { note("...."); }
>   }
>
> But that's really ugly, takes up a lot of space, is confusing, and is
> redundant.
>
> How would I best solve this problem in Perl6?

Write an appropriate macro:

    warns(is( foo(undef, undef), undef, "foo(undef, undef) gives undef"),
          "uninitialized value in concatenation or string");


That way you get to ensure that the warning gets thrown correctly if undef is
passed, but you don't get the warning mucking up your test output.

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About