US.pm

The US module may be configured to call the proper sub modules and return a shallow hash of the data:

methods
new()
Payroll::US->calculate(gross, date, method, allowances, period, marital, grossYTD)
  returns hash of {FedIncome} = X, {Medicare} = Y, {FICA} = Z
errorMessage
setError
didErrorOccur
isValid

sub calculate
{
  #validate inputs
  # new Payroll::US::FedIncome
  # new Payroll::US::FICA
  # new Payroll::US::Medicare

  #hash{FedIncome} = Payroll::US::FedIncome->calculate(
  #hash{Medicare} = Payroll::US::Medicare->calculate(
  #hash{FICA} = Payroll::US::FICA->calculate(
  #validate output
  #return hash
}