in reply to Java Style Interface Objects?

Class::Trait is a flexible and powerful way to do what I think you really want to do instead of how Java does this.

Update: typo in module name fixed.

Replies are listed 'Best First'.
Re^2: Java Style Interface Objects?
by stvn (Monsignor) on Feb 04, 2006 at 16:00 UTC

    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.

    -stvn