match::simple::sugar(3pm)

match::simple::sugar3pm

A few extras for match::simple

Usage

This module provides a "given"/"when" substitute for match::simple.

   use match::simple::sugar;
   
   for ( $var ) {
      when 'foo',        then { ... };
      when 'bar', 'baz', then { ... };
      ...;  # otherwise
   }

It also provides a function for numeric matching (because match::simple always assumes you want stringy matching if the right-hand-side is a defined non-reference value).

   use match::simple::sugar;
   
   for ( $var ) {
      when numeric 0, then { ... };
      when numeric 1, then { ... };
      ...;  # otherwise
   }

Overview

This module exports three functions "when", "then", and "numeric", and also re-exports "match" from match::simple.

"when" and "then"

The "when" and "then" functions are intended to be used together, inside a "for ( SCALAR ) { ... }" block. The block acts as a topicalizer (it sets $_) and also a control-flow mechanism ("when" can use "next" to jump out of it). Any other use of "when" and "then" is unsupported.

"when( @values, $then )"

The "when" function accepts a list of values, followed by a special $then argument.

If $_ matches (according to the definition in match::simple) any of the values, then the $then argument will be executed, and "when" will use the Perl built-in "next" keyword to jump out of the surrounding "for" block.

"then { ... }"

The "then" function takes a block of code and returns an object suitable for use as "when"'s $then argument.

In the current implementation, the block of code should not inspect @_ or "wantarray", and should not use the "return", "next", "last", or "redo" keywords. (If you set any of the "PERL_STRICT", "EXTENDED_TESTING", "AUTHOR_TESTING", or "RELEASE_TESTING" environment variables to true, then match::simple::sugar will try to enforce this! This is intended to catch faulty "then" blocks when running your test suite.)

"numeric"

The "numeric" function accepts a number and returns a blessed object which has a "MATCH" method. The "MATCH" method returns true if it is called with a single defined non-referece scalar that is numerically equal to the original number passed to "numeric". Example:

   numeric( '5.0' )->MATCH( '5.000' );    # true

This is intended for use in cases like:

   if ( match $var, numeric 1 ) {
      ...;
   }

Disclaimer of warranties

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

Bugs

Please report any bugs to <https://github.com/tobyink/p5-match-simple/issues>.

Author

Toby Inkster <[email protected]>.

This module is inspired by a talk I gave to Boston.PM <https://boston-pm.github.io/>.

From libmatch-simple-perl 0.012-1 in Debian 13 (Trixie). Parsed by carta from the page's man source.