Syntax::Keyword::Junction(3pm)

Syntax::Keyword::Junction3pm

Comparisons against multiple values

Usage

  use Syntax::Keyword::Junction qw/ all any none one /;
  if (any(@grant) eq 'su') {
    ...
  }
  if (all($foo, $bar) >= 10) {
    ...
  }
  if (qr/^\d+$/ == all(@answers)) {
    ...
  }
  if (all(@input) <= scalar @limits) {
    ...
  }
  if (none(@pass) eq 'password') {
    ...
  }
  if (one(@answer) == 42) {
    ...
  }

or if you want to rename an export, use Sub::Exporter options:

  use Syntax::Keyword::Junction any => { -as => 'robot_any' };
  if (robot_any(@grant) eq 'su') {
    ...
  }

Overview

This is a lightweight module which provides 'Junction' operators, the most commonly used being "any" and "all".

Inspired by the Perl 6 design docs, <https://web.archive.org/web/20230922160729/https://raku.org/archive/doc/design/exe/E06.html#The%20Wonderful%20World%20of%20Junctions>.

Provides a limited subset of the functionality of Quantum::Superpositions, see "SEE ALSO" for comment.

Notice in the "SYNOPSIS" above, that if you want to match against a regular expression, you must use "==" or "!=". Not "=~" or "!~". You must also use a regex object, such as "qr/\d/", not a plain regex such as "/\d/".

Subroutines

all()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if all arguments test true according to the operator used.

any()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true if any argument tests true according to the operator used.

none()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if no argument tests true according to the operator used.

one()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if one and only one argument tests true according to the operator used.

Altering junctions

You cannot alter junctions. Instead, you can create new junctions out of old junctions. You can do this by calling the "values" method on a junction.

  my $numbers = any(qw/1 2 3 4 5/);
  print $numbers == 3 ? 'Yes' : 'No';   # Yes
  $numbers = any( grep { $_ != 3 } $numbers->values );
  print $numbers == 3 ? 'Yes' : 'No';   # No

You can also use the "map" method:

  my $numbers = any(qw/1 2 3 4 5/);
  my $prime   = $numbers->map( \&is_prime );
  say for $prime->values; # prints 0, 1, 1, 0, 1

Export

'all', 'any', 'none', 'one', as requested.

All subroutines can be called by its fully qualified name, if you don't want to export them.

  use Syntax::Keyword::Junction;
  if (Syntax::Keyword::Junction::any( @questions )) {
    ...
  }

Warning

When comparing against a regular expression, you must remember to use a regular expression object: "qr/\d/" Not "/d/". You must also use either "==" or "!=". This is because "=~" and "!~" cannot be overridden.

To do

Add overloading for arithmetic operators, such that this works:

  $result = any(2,3,4) * 2;
  if ($result == 8) {...}

Contributors

•

Arthur Axel 'fREW' Schmidt <[email protected]>

•

Carl Franks <[email protected]>

•

David Steinbrunner <[email protected]>

•

Graham Knop <[email protected]>

•

Maxime Soulé <[email protected]>

•

Michael Schout <[email protected]>

•

Olivier Mengué <[email protected]>

•

Paul Cochrane <[email protected]>

•

Ricardo Signes <[email protected]>

•

Rob Hoelz <[email protected]>

Releases

6 releases since Debian 8 (Jessie); the text changed 3 times.

  1. 8–10
  2. 11
  3. 12
  4. 13

Bugs

Please report any bugs or feature requests on the bugtracker website <https://github.com/haarg/Syntax-Keyword-Junction/issues>

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

Authors

•

Arthur Axel "fREW" Schmidt <[email protected]>

•

Carl Franks

From libsyntax-keyword-junction-perl 0.003009-1 in Debian 13 (Trixie). Parsed by carta from the page's man source.