Different packages can use the same subroutine name without colliding.

Namespace Separation

namespace_separation.pl
use strict;
use warnings;

package Metric;

sub label {
    my ($size) = @_;
    return "$size cm";
}

package Imperial;

sub label {
    my ($size) = @_;
    return "$size in";
}

package main;

my $system = ;
my $size = 5;
my $label;

if ($system eq "metric") {
    $label = Metric::label($size);
} else {
    $label = Imperial::label($size);
}

print "system=$system\n";
print "label=$label\n";
use strict;
use warnings;

package Metric;

sub label {
    my ($size) = @_;
    return "$size cm";
}

package Imperial;

sub label {
    my ($size) = @_;
    return "$size in";
}

package main;

my $system = ;
my $size = 5;
my $label;

if ($system eq "metric") {
    $label = Metric::label($size);
} else {
    $label = Imperial::label($size);
}

print "system=$system\n";
print "label=$label\n";
namespace separation Namespace separation lets each package own its names independently.