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