SPUG: Class::Multimethods and superclass

James Moore james at banshee.com
Sun May 22 07:32:51 PDT 2005

Anyone out there using Class::Multimethods?  I'm confused about what to do
with the objects returned by superclass().  In particular, in this example,
something like the lines:

$self = $$self
      if (ref $self) =~ /Class::Multimethods::SUPERCLASS_OF/;

in print_me() seem to be necessary, but this is such a cludge I have trouble
believing that it's what's intended.

It seems as if superclass() doesn't return an object that's suitable for
passing values to a method; the object is only useful for making sure the
right method is called.

It's early on a Sunday morning though and I'm hoping I'm just missing
something obvious.

 - James

package Base;
use Class::Multimethods;

sub blarg {
  return 3;

multimethod print_me => (Base) => sub
    my ($self) = @_;
    $self = $$self
      if (ref $self) =~ /Class::Multimethods::SUPERCLASS_OF/;
    print "Base stuff " . $self->blarg . "\n";

package Derived;
use Class::Multimethods;
use base 'Base';
# @ISA = qw(Base);

multimethod print_me => (Derived) => sub
    my ($self) = @_;
    my $sc = superclass ($self);
    print_me( superclass($self) ); # START LOOKING IN ANCESTORS
    print "Derived stuff\n";

use Class::ISA;

print_me (bless {}, 'Base');
print_me (bless {}, 'Derived');

More information about the spug-list mailing list