in reply to Re^2: Can't locate object method- Issue
in thread Can't locate object method- Issue

See my recent update.

package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
  • Comment on Re^3: Can't locate object method- Issue

Replies are listed 'Best First'.
Re^4: Can't locate object method- Issue
by perl_noobie (Initiate) on Sep 28, 2013 at 12:45 UTC
    Is there any way that a role can be removed after being assigned to a object? In my case, I would like to have a role assigned to an object, but during the course of the script, my roles for the particular object need to be modified. I want to remove the earlier role and add a new role to the object. Is there a way to do this?

      This sounds like horribly bad design.

      You haven't told us what problem you are trying to solve by this approach, but from my perspective, it looks as if your approach would be far better served by an object A that has another object B, which gets removed or replaced by a third object C if its behavirour needs to change:

      A -> B # Change behaviour: A -> C

      Maybe, B and C can implement some roles, but the interface of A should remain identical and delegate to its worker, B or C.

        Well, that's a classic OO pattern (delegation), but IMHO having whole objects just to contain a subset of behavior is overkill. Roles are packages of behavior explicitly.

        I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.
Re^4: Can't locate object method- Issue
by perl_noobie (Initiate) on Sep 28, 2013 at 12:47 UTC

    Is there any way that a role can be removed after being assigned to a object? In my case, I would like to have a role assigned to an object, but during the course of the script, my roles for the particular object need to be modified. I want to remove the earlier role and add a new role to the object. Is there a way to do this?