Raku Logic

raku(1) offers several logical flow constructs.


If

if structures can be written in two ways.

if $a < 2 {
  say 'Hello, world!'
}

say 'Hello, world!' if $a < 2 ;

No matter the way it is written, the condition always evaluates first.

Fall-through conditions are specified with elsif and else clauses.

if $b = 0 {
  say 'zero'
} elsif $b < 0 {
  say 'negative'
} else {
  say 'positive'
}

As with any other boolean contexts, a condition can be inverted with either the ! or not operators.


Unless

The unless structure is simply a negated if structure. It cannot take an else or elsif clause.

unless 2 <= $a {
  say 'Hello, world!'
}


With

The with structure is like an if structure that branches based on whether a variable is declared.

my $b;
with $b {
  say 'This never happens'
}

$b = 1;
with $b {
  say '$b is set'
}


Without

A negated with structure.

my $b;
without $b {
  say '$b is unset'
}

$b = 1;
without $b {
  say 'This never happens'
}


For

To loop over the elements of an array, try:

my @a = 1,2,3;

for @a -> $b {
  say $b
}


Loop

A classic loop.

loop (my $i = 0; $i < 5; $i++) {
  say $i
}


Given

To check a value for one or more conditions and branch based on those results, try:

my $a = 0;

given $var {
    when 1..10 { say '$a is within [1,10]' }
    when Int { say '$a is an integer' }
    when 42  { say '$a is exactly 0' }
    default  { say "the fall-through case" }
}

After matching a condition, the given structure is exited immediately. To override this behavior and continue trying cases, use the proceed keyword.

given $var {
    when 1..10 { say '$a is within [1,10]'; proceed }
    when Int { say '$a is an integer'; proceed }
    when 42  { say '$a is exactly 0' }
    default  { say "the fall-through case" }
}

But be sure to not include proceed on the penultimate case unless the fall-through case is intended to always execute.


CategoryRicottone

Raku/Logic (last edited 2023-08-27 18:33:25 by DominicRicottone)