for my $property ( keys %self ) { if ( exists $param_hr->{$property} ) { my $type = ref $param_hr->{$property} || 'String'; my $expected_type = ref $self{$property} || 'String'; croak "$property should be a $expected_type" if $expected_type ne $type; $self{$property} = delete $param_hr->{$property}; } }