Junctions
Junctions are one of the simplest examples of where Perl 6 can work in parallel. In the version of Rakudo, which is available at the time of writing this book, this feature is not fully implemented.
A junction is a value that keeps many values at the same time. Examine the following code:
my $j = 1 | 3 | 5; say 'OK' if $j == 3; say 'Not OK' if $j != 2;
The variable $j
is a junction that keeps three odd numbers, 1
, 3
, and 5
. You may compare $j
with an integer and get the Boolean True
if the value is one of the values hosted by the junction. In the case of comparing with 3
, the result is True
, while the second comparison with 2
fails.
Autothreading
Now try passing a junction to a function that takes a scalar:
sub f($x) { say $x; return $x; } say 'OK' if f(1 | 3 | 5) == 3; say 'Not OK' if f(1 | 3 | 5) != 2;
The behavior is intuitively understandable—the function is executed for each of the values of the junction separately. The values that the function returns are then used as...