Perl6::Junction - Perl6 style Junction operators in Perl5. |
Perl6::Junction - Perl6 style Junction operators in Perl5.
use Perl6::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) { ... }
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 the Quantum::Superpositions manpage, 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/
.
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.
'all', 'any', 'none', 'one', as requested.
All subroutines can be called by it's fully qualified name, if you don't want to export them.
use Perl6::Junction; if (Perl6::Junction::any( @questions )) { ... }
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 overriden.
Add overloading for arithmetic operators, such that this works:
$result = any(2,3,4) * 2; if ($result == 8) {...}
Submit to the CPAN bugtracker http://rt.cpan.org
the Quantum::Superpositions manpage 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% improvment.
http://dev.perl.org/perl6/doc/design/exe/E06.html - ``The Wonderful World of Junctions''.
Carl Franks
Copyright 2005, Carl Franks. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself (the perlgpl manpage, the perlartistic manpage).
Perl6::Junction - Perl6 style Junction operators in Perl5. |