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

2005-04-27 Thread Piers Cawley
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?

2005-04-25 Thread Luke Palmer
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?

2005-04-25 Thread David Storrs
On Mon, Apr 25, 2005 at 05:18:11AM -0600, Luke Palmer wrote:
 David Storrs writes:
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.  

Exactly; that's why I asked how would I solve this, instead of how
would I write note().


 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

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? 

--Dks
-- 
[EMAIL PROTECTED]


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

2005-04-25 Thread Juerd
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