Go to Google Groups Home    perl.perl6.language
Re: turning off warnings for a function's params?

Luke Palmer <l...@luqui.org>

David Storrs 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" );

> How would I best solve this problem in Perl6?

Of course, no ordinary definition of a note() sub will work, since the
concatenation happens before note is even touched.  However, a macro
could do it.  It might go something like this:

    macro note(Perl::Expression $expr)
        is parsed(/$<expr> := <Perl.arglist(:(Str))>/)
    {
        $expr.compile(:warnings(0));
    }

Luke