On Thu, 12 Jan 2012, Mark Hedges wrote:
I don't know if I'm going about this in the right way. I want to
represent a machine. Machines may be different hardware types. It gets
a role for the hardware type that supplies methods that might be able to
powercycle it. I am applying the hardware-specific role using
apply_all_roles to the instance rather than consuming a role in the
class. (Since it gets a different role based on which type it is, and
each one of these roles supplies the same named method.) I just wanted
to double-check when I apply the role to the object that it is the
correct type.
It seems to me that this would be better written like this:
package Machine;
use Moose;
has power_cycler => (
is => 'ro',
does => 'PowerCycler',
handles => [ 'restart' ],
);
In other words, make a separate object that represents the type of power
cycler (or whatever you call it) and let that handle restarting the
machine.
You may need to set up a circular reference between the two objects, in
which case this may be necessary:
sub BUILD {
my $self = shift;
$self->power_cycler->machine($self0;
}
You should make one of these a weak ref (probably the ref from cycler to
machine) to precent memory leaks.
-dave
/*============================================================
http://VegGuide.org http://blog.urth.org
Your guide to all that's veg House Absolute(ly Pointless)
============================================================*/