sub example_method { my $self = shift; my %args; { my %raw_args = @_; %args = map {lc($_) => $raw_args{$_}} keys %raw_args; } unless ($args{'handle'}) { croak("Missing 'handle' argument"); } unless ($args{'thing'}) { croak("Missing 'thing' argument"); } unless (4 == @_) { croak("Unexpected extra parameters"); } my ($handle,$thing) = @args{'handle','thing'}; #... }