Release of version 1.70 of Class::Multimethods


NAME

        Class::Multimethods - Support multimethods and subroutine
                              overloading in Perl

SYNOPSIS

# ONLY WORKS UNDER 5.005 OR LATER (NEEDS qr//)

use 5.005;

# IMPORT THE multimethod DECLARATION SUB...

use Class::Multimethods;

# DECLARE VARIOUS MULTIMETHODS CALLED find...

# 1. DO THIS IF find IS CALLED WITH A Container REF AND A Query REF...

              multimethod find => (Container, Query)
                               => sub { $_[0]->findquery($_[1]) };

        # 2. DO THIS IF find IS CALLED WITH A Container REF AND A Sample REF...

              multimethod find => (Container, Sample)
                               => sub { $_[0]->findlike($_[1]) };

        # 3. DO THIS IF find IS CALLED WITH AN Index REF AND A Word REF...

              multimethod find => (Index, Word)
                               => sub { $[0]->lookupword($_[1]) };

        # 4. DO THIS IF find IS CALLED WITH AN Index REF AND A qr// PATTERN

              multimethod find => (Index, Regexp)
                               => sub { $[0]->lookuprx($_[1]) };

        # 5. DO THIS IF find IS CALLED WITH AN Index REF AND A NUMERIC SCALAR

              multimethod find => (Index, '#')
                               => sub { $[0]->lookupelem($_[1]) };

        # 6. DO THIS IF find IS CALLED WITH AN Index REF AND
        #    A NON-NUMERIC SCALAR

              multimethod find => (Index, '$')
                               => sub { $[0]->lookupstr($_[1]) };

        # 7. DO THIS IF find IS CALLED WITH AN Index REF AND AN UNBLESSED
        #    ARRAY REF (NOTE THE RECURSIVE CALL TO THE find MULTIMETHOD)

              multimethod find => (Index, ARRAY)
                               => sub { map { find($_[0],$_) } @{$_[1]} };

        # SET UP SOME OBJECTS...

              my $cntr = new Container ('./datafile');
              my $indx = $cntr->get_index();

        # ...AND SOME INHERITANCE...

              @BadWord::ISA = qw( Word );
              my $badword = new BadWord("fubar");

        # ...AND EXERCISE THEM...

              print find($cntr, new Query('cpan OR Perl'));           # CALLS 1.
              print find($cntr, new Example('by a committee'));       # CALLS 2.

              print find($indx, new Word('sugar'));                   # CALLS 3.
              print find($indx, $badword);                            # CALLS 3.
              print find($indx, qr/another brick in the Wall/);       # CALLS 4.
              print find($indx, 7);                                   # CALLS 5.
              print find($indx, 'But don't do that.');                # CALLS 6.
              print find($indx, [1,"one"]);                           # CALLS 7,
                                                                      # THEN 5,
                                                                      # THEN 6.

INSTALLATION

It's all pure Perl, so just put the .pm file in its appropriate local Perl subdirectory.

AUTHOR

Damian Conway (damian@cs.monash.edu.au)

COPYRIGHT

       Copyright (c) 1999-2000, Damian Conway. All Rights Reserved.
     This module is free software. It may be used, redistributed
         and/or modified under the same terms as Perl itself.

CHANGES IN VERSION 1.70


AVAILABILITY

Class::Multimethods has been uploaded to the CPAN and is also available from:

http://www.csse.monash.edu.au/~damian/CPAN/Class-Multimethods.tar.gz