A main program can choose which package helper to call without importing external files.

dispatch Dispatch chooses which helper should handle a value.

Dispatch Helpers

mode
dispatch_helpers.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

package TextTools;

sub shout {
    my ($text) = @_;
    return uc $text;
}

sub whisper {
    my ($text) = @_;
    return lc $text;
}

package main;

my $mode = "shout";
my $text = "Perl";
my $result;

if ($mode eq "shout") {
    $result = TextTools::shout($text);
} else {
    $result = TextTools::whisper($text);
}

print "mode=$mode\n";
print "result=$result\n";
use strict;
use warnings;

package TextTools;

sub shout {
    my ($text) = @_;
    return uc $text;
}

sub whisper {
    my ($text) = @_;
    return lc $text;
}

package main;

my $mode = "whisper";
my $text = "Perl";
my $result;

if ($mode eq "shout") {
    $result = TextTools::shout($text);
} else {
    $result = TextTools::whisper($text);
}

print "mode=$mode\n";
print "result=$result\n";
  1. $mode ← shout, $text ← Perl, $result ← (empty)

    18my $mode→ shout = "shout"; #@mode="whisper"19my $text→ Perl = "Perl";20my $result→ (empty);
  2. if ($mode eq "shout")

    22if ($modeshout eq "shout") {23    $result(empty) = TextTools::shout($textPerl);24} else {
  3. $text ← Perl

    6sub shout {7    my ($text→ Perl) = @_;8    return uc $textPerl;9}
  4. $result ← PERL

    22if ($mode eq "shout") {23    $result→ PERL = TextTools::shout($textPerl);24} else {
  5. print "mode=$mode ";

    28print "mode=$modeshout\n";29print "result=$resultPERL\n";
    outputmode=shout
    result=PERL
  1. $mode ← whisper, $text ← Perl, $result ← (empty)

    18my $mode→ whisper = "whisper";19my $text→ Perl = "Perl";20my $result→ (empty);
  2. else

    23    $result = TextTools::shout($text);24} else {25    $result(empty) = TextTools::whisper($textPerl);26}
  3. $text ← Perl

    11sub whisper {12    my ($text→ Perl) = @_;13    return lc $textPerl;14}
  4. $result ← perl

    24} else {25    $result→ perl = TextTools::whisper($textPerl);26}
  5. print "mode=$mode ";

    28print "mode=$modewhisper\n";29print "result=$resultperl\n";
    outputmode=whisper
    result=perl