Chapter 14. Junctions and Sets

Junctions

A Junction is a combination of values that is mostly indistinguishable from a single value. They have their roots in the math of quantum mechanics. You may have heard of Schrödinger’s cat, who is both dead and alive at the same time—an analogy that physicist used to show how ridiculous this all is. Well, the joke was on him.

any

The first Junction is the any. This “any” is lowercase and is not related to the type Any. It creates a value that can act like, well, any of the ones you gave it:

my $first-junction = any( 1, 3, 7 );

You can make a Junction from an Array or any other Positional:

my $junction = any( @array   );   # Array
my $junction = any( 1 ..  10 );   # Range
my $junction = any( 1 ... 10 );   # Sequence

Now you have a Junction of three values. It will only ever have three values. You can’t take one away or add one. There’s no interface to extract them or count them. You’re not supposed to know—or even care—which values are in there. In fact, Junction is the only builtin type that does not inherit from Any:

% perl6
To exit type 'exit' or '^D'
> my $first-junction = any( 1, 3, 7 );
any(1, 3, 7)
> $first-junction.^name
Junction
> $first-junction.^mro
((Junction) (Mu))

These are quite handy in complex conditions. Consider the annoying code you’ve had to write to test if a value is one of three possible numbers:

my $n = any( 1, 3, 7 );

if $n == 1 || $n == 3 || $n == 7 {
    put "n is one of those values";
    }

Being clever with a Hash doesn’t actually feel that ...

Get Learning Perl 6 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.