It doesn't work because die and warn are keywords rather than subs in your namespace. As choroba has noted, in more recent versions of Perl many keywords are also available as functions in the CORE package, but the CORE package can behave abnormally sometimes.
Carp usually gives more helpful line numbers than die/warn, and as a bonus, these are real functions:
use Carp;
($die_on_error ? \&croak : \&carp)->($error);
That said, I'm really quite liking this as an alternative:
package My::Module;
use warnings::register;
...;
warnings::warnif("The flooble has become discombobulated!");
...;
The awesome thing about it is that people using your module can enable this warning like this:
use warnings 'Your::Module';
And if they'd prefer the warning to be fatal:
use warnings FATAL => 'Your::Module';
... and everything works just like Perl's built-in warnings categories! Yay!
(Though I'll note that the Perl 5.8 implementation of custom warnings categories kinda sucked. It's been good since 5.10.0.)
use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name
|