sub new { my ($self, %param) = @_; my ($dbh, $foo) = map { $param($_) || croak "need $_" } qw(dbh foo); # ... stuff that uses $dbh and $foo ... } #### croak "need a foo" unless UNIVERSAL::isa($foo, 'Foo'); #### package Foo; use Carp; use Regexp::Common; # ... rest of class ... sub add { my ($self, $n) = @_; croak "need Foo object" unless UNIVERSAL::isa($self, 'Foo'); croak "need number" unless $n =~ $RE{num}{real} $self->{total} += $n; };