package Customer; use Devel::Deprecate 'deprecate'; sub persist { my $self = shift; my $change_event = shift || $self->change_event; deprecate( { reason => 'Should no longer have an optional change event', warn => '2008-06-12', # or DateTime object die => '2008-08-12', # or DateTime object if => ( scalar @_ ), # optional? } ); ... rest of method }