Control Flow Patterns
Unless Guard
An unless block runs only when a condition is false, which makes it useful for guard checks.
guard
A guard handles a special case before the main path continues.
Unless Guard
unless_guard.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $name = "";
my $message;
unless (length $name) {
$message = "missing name";
} else {
$message = "hello $name";
}
print "name=$name\n";
print "message=$message\n";
use strict;
use warnings;
my $name = "Mira";
my $message;
unless (length $name) {
$message = "missing name";
} else {
$message = "hello $name";
}
print "name=$name\n";
print "message=$message\n";
use strict;
use warnings;
my $name = "Kai";
my $message;
unless (length $name) {
$message = "missing name";
} else {
$message = "hello $name";
}
print "name=$name\n";
print "message=$message\n";
$name ← (empty), $message ← (empty)
4my $name→ (empty) = ""; #@name="Mira", "Kai"5my $message→ (empty);$message ← missing name
7unless (length $name(empty)) {8 $message→ missing name = "missing name";9} else {print "name=$name ";
13print "name=$name(empty)\n";14print "message=$messagemissing name\n";outputname= message=missing name
$name ← Mira, $message ← (empty)
4my $name→ Mira = "Mira";5my $message→ (empty);$message ← hello Mira
8 $message = "missing name";9} else {10 $message→ hello Mira = "hello $nameMira";11}print "name=$name ";
13print "name=$nameMira\n";14print "message=$messagehello Mira\n";outputname=Mira message=hello Mira
$name ← Kai, $message ← (empty)
4my $name→ Kai = "Kai";5my $message→ (empty);$message ← hello Kai
8 $message = "missing name";9} else {10 $message→ hello Kai = "hello $nameKai";11}print "name=$name ";
13print "name=$nameKai\n";14print "message=$messagehello Kai\n";outputname=Kai message=hello Kai
Guard the Missing Name
$namestarts as an empty string.length $nameis0, which is false.unlessruns because the condition is false.$messagebecomesmissing name. | Name | Branch | Message | | --- | --- | --- | | empty string |unless|missing name| |Mira|else|hello Mira| |Kai|else|hello Kai|
Exercise: unless_guard.pl
Use unless to handle a missing name and otherwise print hello with the name