Modules and Packages
Dispatch Helpers
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
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";
$mode ← shout, $text ← Perl, $result ← (empty)
18my $mode→ shout = "shout"; #@mode="whisper"19my $text→ Perl = "Perl";20my $result→ (empty);if ($mode eq "shout")
22if ($modeshout eq "shout") {23 $result(empty) = TextTools::shout($textPerl);24} else {$text ← Perl
6sub shout {7 my ($text→ Perl) = @_;8 return uc $textPerl;9}$result ← PERL
22if ($mode eq "shout") {23 $result→ PERL = TextTools::shout($textPerl);24} else {print "mode=$mode ";
28print "mode=$modeshout\n";29print "result=$resultPERL\n";outputmode=shout result=PERL
$mode ← whisper, $text ← Perl, $result ← (empty)
18my $mode→ whisper = "whisper";19my $text→ Perl = "Perl";20my $result→ (empty);else
23 $result = TextTools::shout($text);24} else {25 $result(empty) = TextTools::whisper($textPerl);26}$text ← Perl
11sub whisper {12 my ($text→ Perl) = @_;13 return lc $textPerl;14}$result ← perl
24} else {25 $result→ perl = TextTools::whisper($textPerl);26}print "mode=$mode ";
28print "mode=$modewhisper\n";29print "result=$resultperl\n";outputmode=whisper result=perl