#!/usr/bin/perl
# Example - Params::Util - Positional
use strict;
use warnings;
use Carp;
use Data::Dumper;
use Params::Util qw( _STRING _POSINT );
my ( $state_re, $zip_re, $non_blank_re ) = do 'common.pl';

sub check_zip {
    my $name    = _STRING( shift ) or croak 'Invalid name';
    my $address = _STRING( shift ) or croak 'Invalid address';
    my $city    = _STRING( shift ) or croak 'Invalid city';
    my $state   = _STRING( shift ) or croak 'Invalid state';
    my $zip     =          shift;
    croak 'Too many arguments' if @_;
    croak 'Invalid state' if $state !~ /$state_re/;
    croak 'Invalid zip'   if defined $zip and ( !_POSINT($zip) or $zip !~ /$zip_re/ );

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