our $TaxRate = 0.20; sub add_tax { my ($price) = @_; return $price * (1 + $TaxRate); } print add_tax(50.00), "\n"; # Let's swap to a country with a lower tax rate $TaxRate = 0.15; print add_tax(50.00), "\n"; #### sub add_tax { my ($price, $TaxRate) = @_; return $price * (1 + $TaxRate); } print add_tax(50.00, 0.20), "\n"; print add_tax(50.00, 0.15), "\n"; #### { package Tax::Zone; sub new { my $class = shift; my $rate = $_[0]; bless \$rate, $class; } sub add_tax { my $self = shift; my $price = $_[0]; return $price * (1 + $$self); } } my $fooland = Tax::Zone->new(0.20); print $fooland->add_tax(50.00), "\n"; my $barland = Tax::Zone->new(0.15); print $barland->add_tax(50.00), "\n";