Package A; use Carp; sub new { ... } sub f1 { my $param1 = shift; my $param2 = shift; my $param3 = shift; croak '- parameter1 required' unless $param1; if ((!$param2) && $param3 eq 'X') { croak '- parameter2 required' ; } some code here; }