Command-Line Program Patterns
Argument Validation
Validate a simple name before using it.
argument-validation
Validation checks whether input follows the shape a command expects. The result can be a plain status string instead of an exception.
Argument Validation
argument_validation.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $style = "clean";
my $name = "report";
if ($style eq "slash") {
$name = "bad/slash";
} elsif ($style eq "empty") {
$name = "";
}
my $valid = $name =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;
my $status = $valid ? "accepted" : "rejected";
print "style=$style\n";
print "name=$name\n";
print "status=$status\n";
use strict;
use warnings;
my $style = "slash";
my $name = "report";
if ($style eq "slash") {
$name = "bad/slash";
} elsif ($style eq "empty") {
$name = "";
}
my $valid = $name =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;
my $status = $valid ? "accepted" : "rejected";
print "style=$style\n";
print "name=$name\n";
print "status=$status\n";
use strict;
use warnings;
my $style = "empty";
my $name = "report";
if ($style eq "slash") {
$name = "bad/slash";
} elsif ($style eq "empty") {
$name = "";
}
my $valid = $name =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;
my $status = $valid ? "accepted" : "rejected";
print "style=$style\n";
print "name=$name\n";
print "status=$status\n";
$style ← clean, $name ← report, $valid ← 1, $status ← accepted
4my $style→ clean = "clean"; #@style="slash", "empty"5my $name→ report = "report";67if ($style eq "slash") {8 $name = "bad/slash";9} elsif ($style eq "empty") {10 $name = "";11}1213my $valid→ 1 = $namereport =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;14my $status→ accepted = $valid1 ? "accepted" : "rejected";1516print "style=$styleclean\n";17print "name=$namereport\n";18print "status=$statusaccepted\n";outputstyle=clean name=report status=accepted
$style ← slash, $name ← report
4my $style→ slash = "slash";5my $name→ report = "report";$name ← bad/slash
7if ($styleslash eq "slash") {8 $name→ bad/slash = "bad/slash";9} elsif ($style eq "empty") {$valid ← 0, $status ← rejected
13my $valid→ 0 = $namebad/slash =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;14my $status→ rejected = $valid0 ? "accepted" : "rejected";1516print "style=$styleslash\n";17print "name=$namebad/slash\n";18print "status=$statusrejected\n";outputstyle=slash name=bad/slash status=rejected
$style ← empty, $name ← report
4my $style→ empty = "empty";5my $name→ report = "report";$name ← (empty)
8 $name = "bad/slash";9} elsif ($styleempty eq "empty") {10 $name→ (empty) = "";11}$valid ← 0, $status ← rejected
13my $valid→ 0 = $name(empty) =~ /^[A-Za-z0-9_]+$/ ? 1 : 0;14my $status→ rejected = $valid0 ? "accepted" : "rejected";1516print "style=$styleempty\n";17print "name=$name(empty)\n";18print "status=$statusrejected\n";outputstyle=empty name= status=rejected