in reply to Is there a way to dynamically copy subroutine from one module to another?
I must admit that the desired output still leaves me puzzled, but you can reach a solution without using aliases, inheritance or possibly even multiple inheritance. Simply pass a D object as an optional parameter to C's doit() method. My solution below uses Moose, i cannot stress how incredibly useful Moose is, especially if you are considering using multiple inheritance (look into roles). Hope this helps. :)
#!/usr/bin/perl -l package A; use Moose; sub doit { warn "A::doit\n" } package B; use Moose; extends 'A'; sub doit { my ($self, $class) = @_; warn "B::doit\n"; return $class ? $class->doit : $self->SUPER::doit; } package C; use Moose; extends 'B'; package D; use Moose; sub doit { warn "D::doit\n" } package main; my $c = C->new; $c->doit( D->new );
output:
B::doit D::doit
jeffa
L-LL-L--L-LL-L--L-LL-L-- -R--R-RR-R--R-RR-R--R-RR B--B--B--B--B--B--B--B-- H---H---H---H---H---H--- (the triplet paradiddle with high-hat)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Is there a way to dynamically copy subroutine from one module to another?
by OlegG (Monk) on Feb 12, 2011 at 18:03 UTC | |
by jeffa (Bishop) on Feb 12, 2011 at 18:21 UTC |