Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Adding a method to an existing object

by chromatic (Archbishop)
on Feb 13, 2012 at 02:50 UTC ( [id://953384]=note: print w/replies, xml ) Need Help??


in reply to Adding a method to an existing object

I use a similar technique for a very simple plugin system. The main object is a Moose object, and all of the plugins are Moose roles. With in the main class (call it MyApp), I have a method:

sub create_with_roles { my ($class, $roles, %args) = @_; for my $role (@$roles) { next if $role =~ /::/; $role = 'MyApp::Role::' . $role; } Moose::Util::ensure_all_roles( $class, @$roles ); return $class->new( %args ); }

... and within the drive program, I can write:

my $app = MyApp->create_with_roles( [qw( List Of Role Names )], %constructor_arguments );

... and get back an object which is an instance of MyApp which performs all of the named roles. It's been working very well.


Improve your skills with Modern Perl: the free book.

Replies are listed 'Best First'.
Re^2: Adding a method to an existing object
by phaylon (Curate) on Feb 17, 2012 at 19:06 UTC

    Note that this will permanently change the MyApp class, which might not be what is desired. I tend to use MooseX::Traits in most of the general cases.


    Ordinary morality is for ordinary people. -- Aleister Crowley

      I should have mentioned that. It's no problem in my case, because I know none of the plugins will override each other (and no code wants to use an unmodified MyApp object), but Moose traits are more general and applicable.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://953384]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-19 05:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found