Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re: Adding a method to an existing object

by chromatic (Archbishop)
on Feb 13, 2012 at 02:50 UTC ( #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?

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2023-03-23 11:37 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (60 votes). Check out past polls.