Package names and exported routines define the boundary other code should rely on.

Module Boundary

module_boundary.pl
use strict;
use warnings;

my $exports = ;
my @public = split /,/, $exports;
my $public_count = scalar @public;
my $has_debug = grep { $_ eq "debug" } @public;
my $boundary = $has_debug ? "too wide" : "focused";

print "exports=$exports\n";
print "public_count=$public_count\n";
print "has_debug=$has_debug\n";
print "boundary=$boundary\n";
use strict;
use warnings;

my $exports = ;
my @public = split /,/, $exports;
my $public_count = scalar @public;
my $has_debug = grep { $_ eq "debug" } @public;
my $boundary = $has_debug ? "too wide" : "focused";

print "exports=$exports\n";
print "public_count=$public_count\n";
print "has_debug=$has_debug\n";
print "boundary=$boundary\n";
use strict;
use warnings;

my $exports = ;
my @public = split /,/, $exports;
my $public_count = scalar @public;
my $has_debug = grep { $_ eq "debug" } @public;
my $boundary = $has_debug ? "too wide" : "focused";

print "exports=$exports\n";
print "public_count=$public_count\n";
print "has_debug=$has_debug\n";
print "boundary=$boundary\n";
module-boundary Small public boundaries keep modules easier to test and change.