in reply to defaults via Module from outside

Not a answer, but a side bar.

sub rate { return 50 if $_[0] eq 'basic'; return 150 if $_[0] eq 'bronze'; } $rate = rate($package);

could be written as

my %rate = ( basic => 50, bronze => 150, ); $rate = $rate{$package};

or

{ # %rate is private to rate(). my %rate = ( basic => 50, bronze => 150, ); sub rate { return $rate{$_[0]}; } } $rate = rate($package);