#!/usr/bin/perl
# Example - Params::Validate - Named
use strict;
use warnings;
use Data::Dumper;
use Params::Check qw( check );
$Params::Check::WARNINGS_FATAL = 1;
my ( $state_re, $zip_re, $non_blank_re, @states ) = do 'common.pl';

my $check_zip_API = { # Keys must be lowercase
    name  => { required => 1, defined => 1 },
    addr  => { required => 1, defined => 1 },
    city  => { required => 1, defined => 1 },
    state => { required => 1, allow => [@states] }, # No RE needed!
    zip   => { required => 0, allow => $zip_re   },
};

sub check_zip {
    my $parsed_args = check( $check_zip_API, { @_ }, 1 );
    my ( $name, $address, $city, $state, $zip ) = map { $parsed_args->{$_} } 
     qw(  name   addr      city   state   zip );

    print Dumper $name, $address, $city, $state, $zip;
}
sub do_it {
    check_zip(
#        kibble => 'bits',
        name => 'Me',
        addr => '1313 M Lane',
        city => 'Auburn',
        state => 'AL',
        zip   => 36831,
    );
}
do_it();
