Re: turning off warnings for a function's params?
David Storrs [EMAIL PROTECTED] 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 Cnote, 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.
Re: turning off warnings for a function's params?
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
Re: turning off warnings for a function's params?
David Storrs skribis 2005-04-25 10:00 (-0700): Cool. But that seems to turn off all warnings during the compilation of the expression--I only want to get rid of the (expected) 'uninitialized' warning. Will there be a way to do finer-grained control? compile(no warnings :undef; $expr). Juerd -- http://convolution.nl/maak_juerd_blij.html http://convolution.nl/make_juerd_happy.html http://convolution.nl/gajigu_juerd_n.html