Build one behavior by calling another package routine.

Delegation Intro

delegation_intro.pl
use strict;
use warnings;

package Speaker;

sub base_label {
    my ($name) = @_;
    return "$name:makes-sound";
}

package DogSound;

sub label {
    my ($name) = @_;
    my $base = Speaker::base_label($name);
    return "$base:woof";
}

package main;

my $name = ;
my $sound = DogSound::label($name);

print "name=$name\n";
print "sound=$sound\n";
use strict;
use warnings;

package Speaker;

sub base_label {
    my ($name) = @_;
    return "$name:makes-sound";
}

package DogSound;

sub label {
    my ($name) = @_;
    my $base = Speaker::base_label($name);
    return "$base:woof";
}

package main;

my $name = ;
my $sound = DogSound::label($name);

print "name=$name\n";
print "sound=$sound\n";
use strict;
use warnings;

package Speaker;

sub base_label {
    my ($name) = @_;
    return "$name:makes-sound";
}

package DogSound;

sub label {
    my ($name) = @_;
    my $base = Speaker::base_label($name);
    return "$base:woof";
}

package main;

my $name = ;
my $sound = DogSound::label($name);

print "name=$name\n";
print "sound=$sound\n";
delegation-intro Delegation keeps reuse explicit by calling a helper package directly.