Help language development. Donate to The Perl Foundation

Acme::Don't zef:lizmat last updated on 2021-09-09
[![Actions Status](](


Acme::Don't - The opposite of do


    use Acme::Don't;

    don't { print "This won't be printed\n" };    # NO-OP


The Acme::Don't module provides a `don't` command, which is the opposite of Perl's built-in `do`.

It is used exactly like the `do BLOCK` function except that, instead of executing the block it controls, it...well...doesn't.

Regardless of the contents of the block, `don't` returns `Nil`.

You can even write:

    don't {
        # code here
    } while condition();

And, yes, in strict analogy to the semantics of Perl's magical `do...while`, the `don't...while` block is *unconditionally* not done once before the test. ;-)

Note that the code in the `don't` block must be syntactically valid Perl. This is an important feature: you get the accelerated performance of not actually executing the code, without sacrificing the security of compile-time syntax checking.


No opposite

Doesn't (yet) implement the opposite of `do STRING`. The current workaround is to use:

    don't {"filename"};

Double don'ts

The construct:

    don't { don't { ... } }

isn't (yet) equivalent to:

    do { ... }

because the outer `don't` prevents the inner `don't` from being executed, before the inner `don't` gets the chance to discover that it actually *should* execute.

This is an issue of semantics. `don't...` doesn't mean `do the opposite of...`; it means `do nothing with...`.

In other words, doin nothing about doing nothing does...nothing.

Unless not

You can't (yet) use a:

    don't { ... } unless condition();

as a substitute for:

    do { ... } if condition();

Again, it's an issue of semantics. `don't...unless...` doesn't mean `do the opposite of...if...`; it means `do nothing with...if not...`.


Since Perl 6 doesn't have `undef`, the closest thing to it (`Nil`) is being returned by `don't` instead.


Elizabeth Mattijsen <[email protected]>

Source can be located at: . Comments and Pull Requests are welcome.


Copyright 2018, 2019, 2021 Elizabeth Mattijsen

Original author: Damian Conway. Re-imagined from Perl 5 as part of the CPAN Butterfly Plan.

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.