Arthur Axel "fREW" Schmidt > Syntax-Keyword-Junction-0.003008 > Syntax::Keyword::Junction

Download:
Syntax-Keyword-Junction-0.003008.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.003008   Source  

NAME ^

Syntax::Keyword::Junction - Perl6 style Junction operators in Perl5

VERSION ^

version 0.003008

SYNOPSIS ^

  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) <= @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') {
    ...
  }

DESCRIPTION ^

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

Inspired by the Perl6 design docs, http://dev.perl.org/perl6/doc/design/exe/E06.html.

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) {...}

SEE ALSO ^

This module is actually a fork of Perl6::Junction with very few (initial) changes. The reason being that we want to avoid the incendiary name containing Perl6.

Quantum::Superpositions provides the same functionality as this, and more. However, this module provides this limited functionality at a much greater runtime speed, with my benchmarks showing between 500% and 6000% improvement.

http://dev.perl.org/perl6/doc/design/exe/E06.html - "The Wonderful World of Junctions".

AUTHORS ^

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2014 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

syntax highlighting: