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