use Carp; sub example { my %options = ( 'DEBUG' => 0, 'TMPL_PATH' => undef ); my %args = ( %options, @_ ); foreach ( keys %args ) { croak( 'Unknown argument passed to subroutine - ', $_ ) unless exists $options{$_}; } . . }