logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Perl6::Junction - Perl6 style Junction operators in Perl5.

Acknowledgements

       Thanks to "Curtis "Ovid" Poe" for the "ALTERING JUNCTIONS" changes in release 0.40000.

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

Author

       Carl Franks

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/".

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 Perl6::Junction;

         if (Perl6::Junction::any( @questions )) {
           ...
         }

Name

       Perl6::Junction - Perl6 style Junction operators in Perl5.

See Also

       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% improvment.

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

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 oneandonlyone argument tests true according to the operator used.

Support / Bugs

       Submit to the CPAN bugtracker <http://rt.cpan.org>

Synopsis

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

To Do

       Add overloading for arithmetic operators, such that this works:

         $result = any(2,3,4) * 2;

         if ($result == 8) {...}

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
       overriden.

See Also