Command-Line Program Patterns
Status Labels
Map result codes to labels without ending the process.
status-labels
Command-line tools often report success or a category of failure. In a trace, labels teach the same idea without ending the run.
Status Labels
exit_status_labels.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $code = 0;
my $label = "unknown";
if ($code == 0) {
$label = "success";
} elsif ($code == 1) {
$label = "usage-error";
} else {
$label = "data-error";
}
print "code=$code\n";
print "label=$label\n";
use strict;
use warnings;
my $code = 1;
my $label = "unknown";
if ($code == 0) {
$label = "success";
} elsif ($code == 1) {
$label = "usage-error";
} else {
$label = "data-error";
}
print "code=$code\n";
print "label=$label\n";
use strict;
use warnings;
my $code = 2;
my $label = "unknown";
if ($code == 0) {
$label = "success";
} elsif ($code == 1) {
$label = "usage-error";
} else {
$label = "data-error";
}
print "code=$code\n";
print "label=$label\n";
$code ← 0, $label ← unknown
4my $code→ 0 = 0; #@code=1, 25my $label→ unknown = "unknown";$label ← success
7if ($code0 == 0) {8 $label→ success = "success";9} elsif ($code == 1) {print "code=$code ";
15print "code=$code0\n";16print "label=$labelsuccess\n";outputcode=0 label=success
$code ← 1, $label ← unknown
4my $code→ 1 = 1;5my $label→ unknown = "unknown";$label ← usage-error
8 $label = "success";9} elsif ($code1 == 1) {10 $label→ usage-error = "usage-error";11} else {print "code=$code ";
15print "code=$code1\n";16print "label=$labelusage-error\n";outputcode=1 label=usage-error
$code ← 2, $label ← unknown
4my $code→ 2 = 2;5my $label→ unknown = "unknown";$label ← data-error
10 $label = "usage-error";11} else {12 $label→ data-error = "data-error";13}print "code=$code ";
15print "code=$code2\n";16print "label=$labeldata-error\n";outputcode=2 label=data-error