use Carp; my %FOO_KNOWN_ARGS = map {$_=>1} qw/ quz baz /; sub foo { my %args = @_; $FOO_KNOWN_ARGS{$_} or croak "Invalid argument '$_'" for keys %args; # ... } foo(quz=>1,baz=>1); foo(quz=>1,baz=>1,bar=>1); # dies