Error Handling and Defensive Perl
Early Return
Return a clear result as soon as a guard condition matches.
early-return
An early return keeps special cases close to the top of a subroutine.
Early Return
early_return.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
sub count_label {
my ($count) = @_;
return "none" if $count <= 0;
return "many" if $count > 3;
return "some";
}
my $count = 2;
my $label = count_label($count);
print "count=$count\n";
print "label=$label\n";
use strict;
use warnings;
sub count_label {
my ($count) = @_;
return "none" if $count <= 0;
return "many" if $count > 3;
return "some";
}
my $count = 0;
my $label = count_label($count);
print "count=$count\n";
print "label=$label\n";
use strict;
use warnings;
sub count_label {
my ($count) = @_;
return "none" if $count <= 0;
return "many" if $count > 3;
return "some";
}
my $count = 5;
my $label = count_label($count);
print "count=$count\n";
print "label=$label\n";
$count ← 2
11my $count→ 2 = 2; #@count=0, 512my $label = count_label($count2);$count ← 2
4sub count_label {5 my ($count→ 2) = @_;6 return "none" if $count2 <= 0;7 return "many" if $count > 3;return "many" if $count > 3;
6return "none" if $count <= 0;7return "many" if $count2 > 3;8return "some";return "some";
7 return "many" if $count > 3;8 return "some";9}$label ← some
11my $count = 2; #@count=0, 512my $label→ some = count_label($count2);1314print "count=$count2\n";15print "label=$labelsome\n";outputcount=2 label=some
$count ← 0
11my $count→ 0 = 0;12my $label = count_label($count0);$count ← 0
4sub count_label {5 my ($count→ 0) = @_;6 return "none" if $count0 <= 0;7 return "many" if $count > 3;$label ← none
11my $count = 0;12my $label→ none = count_label($count0);1314print "count=$count0\n";15print "label=$labelnone\n";outputcount=0 label=none
$count ← 5
11my $count→ 5 = 5;12my $label = count_label($count5);$count ← 5
4sub count_label {5 my ($count→ 5) = @_;6 return "none" if $count5 <= 0;7 return "many" if $count > 3;return "many" if $count > 3;
6return "none" if $count <= 0;7return "many" if $count5 > 3;8return "some";$label ← many
11my $count = 5;12my $label→ many = count_label($count5);1314print "count=$count5\n";15print "label=$labelmany\n";outputcount=5 label=many