> Date: Thu, 09 Jan 2003 19:55:20 -0500
> From: John Siracusa <[EMAIL PROTECTED]>
> 
> Has there been any discussion of how to create code in Perl 6 that's there
> under some conditions, but not there under others?  I'm thinking of the
> spiritual equivalent of #ifdef, only Perlish.
> 
> In Perl 5, there were many attempts to use such a feature for debugging and
> assertions.  What everyone wanted to do was write code like this:
> 
>     debug("Doing foo with $bar and $baz");
>     foo($bar, $baz);
> And then have the entire call to debug() just plain disappear when the
> program was run with a certain flag, or when a particular constant was set,
> or whatever.  The closest we got in Perl 5, AFAIK, was stuff this:
> 
>     use constant DEBUG => 0;
>     ...
>     debug("Doing foo with $bar and $baz") if DEBUG;
>     foo($bar, $baz);

Well, I just do:

  sub debug {
    print STDERR shift, "\n" if DEBUG;
  }

And hopefully (I don't know P5 internals so well) that optimizes to a
no-op so there's not even a function call there.  But it's a
negligible overhead anyway.

> But all those "if DEBUG"s or "DEBUG &&"s were a pain.  So I'm wondering what
> the solution will be in Perl 6.

Not that C code is devoid of C<#ifdef>s everywhere there's conditional
code....

I don't see how you could do much without actually labeling what you
wanted to disappear.  You could always use:

  sub debug(&code) {
    &code() if DEBUG;
  }

For a more versatile and readable solution.  I'm not sure what could
be more concise than that.

Luke

Reply via email to