http://qs321.pair.com?node_id=1010362

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Howto create a Moose baseclass/superclass/contract? Moose equivalent of Module::Pluggable? Favorite way to create base/super class?

The use case is some app that does something with different backends

package iAmInYourIsa; sub dothis { croak "subclass must implement dothis" } ...

so one backend is

package iAmInYourIsa::CGI; use parent 'iAmInYourIsa'; use CGI; sub dothis { ... my $q = CGI->new ... $q->param ... }

another is iAmInYourIsa::Tk and so on and so forth?

I could cobble something using Module::Pluggable, but the verbiage is all wrong :)

Replies are listed 'Best First'.
Re: Howto create a Moose baseclass/superclass/contract? Moose equivalent of Module::Pluggable? Favorite way to create base/super class?
by tobyink (Canon) on Dec 26, 2012 at 14:52 UTC

    Don't use an abstract base class; use roles...

    { package IAmNotInYourIsa; use Moose::Role; requires 'dothis'; } { package My::CGI; use Moose; with 'IAmNotInYourIsa'; use CGI; sub dothis { ... my $q = CGI->new ... $q->param ... } } My::CGI->isa('IAmNotInYourIsa'); # false My::CGI->does('IAmNotInYourIsa'); # true!

    A good example can be seen in the Ask distribution on CPAN, where there are different implementations for STDIN/STDOUT, Tk, etc, each of which include:

    with 'Ask::API';

    Ask uses Moo rather than Moose, but the principle is the same.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
Re: Howto create a Moose baseclass/superclass/contract? Moose equivalent of Module::Pluggable? Favorite way to create base/super class?
by karlgoethebier (Abbot) on Dec 26, 2012 at 14:52 UTC

    Reading some manuals? Moose::Manual a.s.o.

    Saying "Please..."?

    Perhaps this helps? Regards, Karl

    P.S.:my goose was too fat. OK - Still got a hangover

    «The Crux of the Biscuit is the Apostrophe»