A lexical variable declared with my can support package code without becoming a package variable.

Lexical Encapsulation

lexical_encapsulation.pl
use strict;
use warnings;

package Labeler;

my $prefix = "tag";

sub make_label {
    my ($value) = @_;
    return "$prefix:$value";
}

package main;

my $value = ;
my $label = Labeler::make_label($value);

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

package Labeler;

my $prefix = "tag";

sub make_label {
    my ($value) = @_;
    return "$prefix:$value";
}

package main;

my $value = ;
my $label = Labeler::make_label($value);

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

package Labeler;

my $prefix = "tag";

sub make_label {
    my ($value) = @_;
    return "$prefix:$value";
}

package main;

my $value = ;
my $label = Labeler::make_label($value);

print "value=$value\n";
print "label=$label\n";
encapsulation Encapsulation keeps implementation details behind a small public subroutine.