Class-Multimethods
view release on metacpan or search on metacpan
lib/Class/Multimethods.pm view on Meta::CPAN
%max_args = (); # RECORDS MAX NUM OF ARGS IN ANY VARIANT
%min_args = (); # RECORDS MIN NUM OF ARGS IN ANY VARIANT
%dispatch_installed = (); # RECORDS DISPATCHES ALREADY INSTALLED __BY__ __US__
# THIS IS INTERPOSED BETWEEN THE CALLING PACKAGE AND Exporter TO SUPPORT THE
# use Class:Multimethods @methodnames SYNTAX
sub import
{
my $package = (caller)[0];
install_dispatch($package,pop @_) while $#_;
Class::Multimethods->export_to_level(1);
}
# INSTALL A DISPATCHING SUB FOR THE NAMED MULTIMETHOD IN THE CALLING PACKAGE
sub install_dispatch
{
my ($pkg, $name) = @_;
lib/Class/Multimethods.pm view on Meta::CPAN
$_[0] =~ s/Class::Multimethods::SUPERCLASS_IS:://
or $_[0] =~ s/Class::Multimethods::SUPERCLASS_OF::(.*)/superclass($1)/;
}
# SQUIRREL AWAY THE PROFFERED SUB REF INDEXED BY THE MULTIMETHOD NAME
# AND THE TYPE NAMES SUPPLIED. CAN ALSO BE USED WITH JUST THE MULTIMETHOD
# NAME IN ORDER TO INSTALL A SUITABLE DISPATCH SUB INTO THE CALLING PACKAGE
sub multimethod
{
my $package = (caller)[0];
my $name = shift;
install_dispatch($package,$name);
if (@_) # NOT JUST INSTALLING A DISPATCH SUB...
{
my $code = pop;
croak "multimethod: last arg must be a code reference"
unless ref($code) eq 'CODE';
my @types = @_;
( run in 1.748 second using v1.01-cache-2.11-cpan-1e74a51a04c )