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

count
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";
  1. $count ← 2

    11my $count→ 2 = 2; #@count=0, 512my $label = count_label($count2);
  2. $count ← 2

    4sub count_label {5    my ($count→ 2) = @_;6    return "none" if $count2 <= 0;7    return "many" if $count > 3;
  3. return "many" if $count > 3;

    6return "none" if $count <= 0;7return "many" if $count2 > 3;8return "some";
  4. return "some";

    7    return "many" if $count > 3;8    return "some";9}
  5. $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
  1. $count ← 0

    11my $count→ 0 = 0;12my $label = count_label($count0);
  2. $count ← 0

    4sub count_label {5    my ($count→ 0) = @_;6    return "none" if $count0 <= 0;7    return "many" if $count > 3;
  3. $label ← none

    11my $count = 0;12my $label→ none = count_label($count0);1314print "count=$count0\n";15print "label=$labelnone\n";
    outputcount=0
    label=none
  1. $count ← 5

    11my $count→ 5 = 5;12my $label = count_label($count5);
  2. $count ← 5

    4sub count_label {5    my ($count→ 5) = @_;6    return "none" if $count5 <= 0;7    return "many" if $count > 3;
  3. return "many" if $count > 3;

    6return "none" if $count <= 0;7return "many" if $count5 > 3;8return "some";
  4. $label ← many

    11my $count = 5;12my $label→ many = count_label($count5);1314print "count=$count5\n";15print "label=$labelmany\n";
    outputcount=5
    label=many