package Foo; use strict; use warnings; my %defaults = ( -foo => "foo", -bar => "bar", ); sub import { shift; my %def = @_; $defaults{_normalise_key($_)} = $def{$_} for keys %def; } sub _normalise_key { local $_ = shift; s/^-?(.*)/-\L$1/; $_ } sub new { my $class = shift; my $number = shift; my %args = @_; my %realargs = %defaults; for ( keys %args ) { my $value = $args{$_}; $realargs{_normalise_key($_)} = $value; } my $self = bless {}, $class; return $self; }