---
name: "Perl6::Junction"
section: "3pm"
platform: "linux"
package: "libperl6-junction-perl"
version: "1.60000-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Perl6::Junction"
---

# Perl6::Junction(3pm)

Perl6 style Junction operators in Perl5.

## NAME

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

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

## 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
```

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

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

## TO DO

Add overloading for arithmetic operators, such that this works:

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

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

## SUPPORT / BUGS

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

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

## AUTHOR

Carl Franks

## ACKNOWLEDGEMENTS

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

## COPYRIGHT AND LICENSE

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 (perlgpl, perlartistic).
