my @known_params = qw(foo bar baz); # of these you know # this is a mockup of the passedParameters hash my %passedParameters = ( foo => 'oil', bar => 'lantern', baz => 'match', quux => 'half pig', ); my %v = validateParams(%passedParameters); print "valid parameters are:\n"; print "$_ => $v{$_}\n" for keys %v; sub validateParams { my %args = @_; my %valid; for my $key (@known_params) { $valid{$key} = delete $args{$key}; # remove from input } if (keys %args) { # any keys left which we don't know? for my $key (keys %args) { warn "unknown parameter '$key' passed, value = '$args{$key}'\n"; } } return %valid; } __END__ unknown parameter 'quux' passed, value = 'half pig' valid parameters are: baz => match foo => oil bar => lantern