Modules and Packages
Lexical Encapsulation
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.