package Input; use strict; use warnings; use Want; sub new { my $self = bless {}, shift; $self->{'params'} = Parameters->new; $self->_init; $self; } sub make_methods { $self = shift; my %methods = @_; for (keys %methods) { my($p,$re,$error) = $methods{$_}; $self->{'regex'}->{$p} = $re; $self->{'error'}->{$p} = $error; } } sub validate { $self = shift; my %input = @_; $self->{'params'}->{$_} = $self->_validate($input{$_},$_}) for keys %input; } sub _validate { $_[1] =~ $_[0]->{'regex'}->{$_[2]} or $_[0]->error($_[2],$_[0]->{'error'}->{$_[2]}); $1; } sub error { my $self = shift; push @{$self->{'errors'}}, [ @_ ] and return 1 if scalar @_ == 2; return scalar @{$self->{'errors'}}; } sub error_hash { my @loop_data; for (@{$self->{'errors'}}) { push(@loop_data, { 'ERROR' => ucfirst $_->[0].' Error: '.$_->[1] } ) for @{$self->{'errors'} }; } return ( 'ERRORS' => \@loop_data ); } sub parameters { my $self = shift; return bless [], if want('OBJECT'); # Single Param. # This is where I'm stuck. Ideally, the object would be called # as $o->parameters->user('Bob'), or something like that. Then # We'd validate the parameter, using the key 'user'. It's rather # simple to do, by just changing parameters->user to parameters->('user','bob'), # but I don't want that! } 1;