Return an ok flag with a message.

status-pairs A pair of scalars can report success or failure without throwing an exception.

Status Pairs

code
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";
  1. $code ← ok

    12my $code→ ok = "ok"; #@code="bad", "hold"13my ($ok, $message) = check_code($codeok);14my $status = $ok ? "pass" : "fail";
  2. $code ← ok

    4sub check_code {5    my ($code→ ok) = @_;6    if ($codeok eq "ok") {7        return (1, "accepted");8    }9    return (0, "rejected");10}
  3. $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
  1. $code ← bad

    12my $code→ bad = "bad";13my ($ok, $message) = check_code($codebad);14my $status = $ok ? "pass" : "fail";
  2. $code ← bad

    4sub check_code {5    my ($code→ bad) = @_;6    if ($codebad eq "ok") {7        return (1, "accepted");8    }9    return (0, "rejected");10}
  3. $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
  1. $code ← hold

    12my $code→ hold = "hold";13my ($ok, $message) = check_code($codehold);14my $status = $ok ? "pass" : "fail";
  2. $code ← hold

    4sub check_code {5    my ($code→ hold) = @_;6    if ($codehold eq "ok") {7        return (1, "accepted");8    }9    return (0, "rejected");10}
  3. $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