subtype USZipCodeC
=> as Value
=> where {
$_ =~ /(?-xism:^(?:(?:(?:USA?)-){0,1}(?:(?:(?:[0-9]{3})(?:[0-9]{2}))(?:(?:-)(?:(?:[0-9]{2})(?:[0-9]{2}))){0,1}))$)/;
};
has 'zip_code' => (is => 'rw', isa => 'USZipCodeC');
####
my $zip_re = qr/(?-xism:^(?:(?:(?:USA?)-){0,1}(?:(?:(?:[0-9]{3})(?:[0-9]{2}))(?:(?:-)(?:(?:[0-9]{2})(?:[0-9]{2}))){0,1}))$)/;
subtype USZipCodeD
=> as Value
=> where {
$_ =~ $zip_re;
};
has 'zip_code' => (is => 'rw', isa => 'USZipCodeD');
####
Rate A D C B
A 2960/s -- -42% -42% -42%
D 5061/s 71% -- -1% -1%
C 5099/s 72% 1% -- -0%
B 5108/s 73% 1% 0% --