Error Handling and Defensive Perl
Status Pairs
Return an ok flag with a message.
status-pairs
A pair of scalars can report success or failure without throwing an exception.
Status Pairs
status_pairs.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
sub check_code {
my ($code) = @_;
if ($code eq "ok") {
return (1, "accepted");
}
return (0, "rejected");
}
my $code = "ok";
my ($ok, $message) = check_code($code);
my $status = $ok ? "pass" : "fail";
print "code=$code\n";
print "status=$status\n";
print "message=$message\n";
use strict;
use warnings;
sub check_code {
my ($code) = @_;
if ($code eq "ok") {
return (1, "accepted");
}
return (0, "rejected");
}
my $code = "bad";
my ($ok, $message) = check_code($code);
my $status = $ok ? "pass" : "fail";
print "code=$code\n";
print "status=$status\n";
print "message=$message\n";
use strict;
use warnings;
sub check_code {
my ($code) = @_;
if ($code eq "ok") {
return (1, "accepted");
}
return (0, "rejected");
}
my $code = "hold";
my ($ok, $message) = check_code($code);
my $status = $ok ? "pass" : "fail";
print "code=$code\n";
print "status=$status\n";
print "message=$message\n";
$code ← ok
12my $code→ ok = "ok"; #@code="bad", "hold"13my ($ok, $message) = check_code($codeok);14my $status = $ok ? "pass" : "fail";$code ← ok
4sub check_code {5 my ($code→ ok) = @_;6 if ($codeok eq "ok") {7 return (1, "accepted");8 }9 return (0, "rejected");10}$ok ← 1, $message ← accepted, $status ← pass
12my $code = "ok"; #@code="bad", "hold"13my ($ok→ 1, $message→ accepted) = check_code($codeok);14my $status→ pass = $ok1 ? "pass" : "fail";1516print "code=$codeok\n";17print "status=$statuspass\n";18print "message=$messageaccepted\n";outputcode=ok status=pass message=accepted
$code ← bad
12my $code→ bad = "bad";13my ($ok, $message) = check_code($codebad);14my $status = $ok ? "pass" : "fail";$code ← bad
4sub check_code {5 my ($code→ bad) = @_;6 if ($codebad eq "ok") {7 return (1, "accepted");8 }9 return (0, "rejected");10}$ok ← 0, $message ← rejected, $status ← fail
12my $code = "bad";13my ($ok→ 0, $message→ rejected) = check_code($codebad);14my $status→ fail = $ok0 ? "pass" : "fail";1516print "code=$codebad\n";17print "status=$statusfail\n";18print "message=$messagerejected\n";outputcode=bad status=fail message=rejected
$code ← hold
12my $code→ hold = "hold";13my ($ok, $message) = check_code($codehold);14my $status = $ok ? "pass" : "fail";$code ← hold
4sub check_code {5 my ($code→ hold) = @_;6 if ($codehold eq "ok") {7 return (1, "accepted");8 }9 return (0, "rejected");10}$ok ← 0, $message ← rejected, $status ← fail
12my $code = "hold";13my ($ok→ 0, $message→ rejected) = check_code($codehold);14my $status→ fail = $ok0 ? "pass" : "fail";1516print "code=$codehold\n";17print "status=$statusfail\n";18print "message=$messagerejected\n";outputcode=hold status=fail message=rejected