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

Reply via email to