Not to nit-pick, but it is Class::Trait actually. (which is only important because search.cpan.org's search engine being the way it is, Class::Trait does not come up on the first page of a search for Class::Traits).
Aside from the misspelling ;) chromatic is absolutely correct. The following code will do what you are asking for:
# in FooInterface.pm
package FooInterface;
use Class::Trait 'base';
our @REQUIRES = qw(foo bar baz);
Then in the class you want to conform to the FooInferface, you can do this:
package Foo;
use Class::Trait 'FooInterface';
sub foo {}
sub bar {}
# missing &baz
And you will get this at (sorta) compile time.
stevan% perl test.pl
Requirement (baz) for FooInterface not in Foo at test.pl line 0
INIT failed--call queue aborted.
I say "sorta" compile time because it is actually during the INIT phase of the compilation cycle. Which is problematic if you are running under mod_perl, or loading the Foo class with require. Both of these limitations (and the appropriate workarounds) are documented in the Class::Trait POD.
|