NAME

    Syntax::Keyword::Assert - debugging checks that throw exceptions

SYNOPSIS

       use v5.14;
       use Syntax::Keyword::Assert;
    
       my @items;
    
       ...
    
       sub get_next_item {
          assert(@items);
          return shift @items;
       }

DESCRIPTION

    This module provides a syntax plugin that implements a keyword which
    checks the truth of its expression, throwing an exception if it is
    false.

    This is similar to the same keyword found in C and maybe other
    languages.

    By default assertions are enabled, but they can be entirely disabled by
    setting the environment variable PERL_ASSERT_ENABLED to zero before the
    module is loaded.

       $ PERL_ASSERT_ENABLED=0 perl ...

    When disabled, the entire expression is skipped over at compiletime,
    meaning that it has exactly zero run-time performance effect. This can
    be useful for disabling such checks in high-performance production
    environments. Knowing that they will have no run-time effect in such
    cases, developers may be more willing to insert assertion checks into
    code that can reveal issues during development and testing in
    non-critical places.

    Because of this disable mode, assertion expressions should not contain
    any side-effects as those effects will not happen when assertions are
    disabled.

KEYWORDS

 assert

       assert(EXPR);

    The assert keyword evaluates its expression in scalar context. If it
    has a true value then nothing further happens. If it is false, then an
    exception is thrown.

    If the expression is given as a numerical or string equality test, then
    the assertion prints the LHS and RHS values separately if it fails,
    giving a more useful failure message.

TODO

      * Customisable failure message.

      * Finer control of whether assertion checks are enabled.
      Per-package/scope/file?

      * Random 1-of-n sampling mode for enabling.

      * Inspection into other binary comparison operators.

      * Inspection of other assertions like reftype tests?

AUTHOR

    Paul Evans <leonerd@leonerd.org.uk>