MRO::Magic - write your own method dispatcher
version 0.100001
First off, at present (2009-05-25) this code requires a development version of perl. It should run on perl5 v10.1, but that isn't out yet, so be patient or install a development perl.
Secondly, the API is not guaranteed to change in massive ways. This code is the result of playing around, not of careful design.
Finally, using MRO::Magic anywhere will impact the performance of all of your program. Every time a method is called via MRO::Magic, the entire method resolution class for all classes is cleared.
You have been warned!
First you write a method dispatcher.
package MRO::Classless; use MRO::Magic metamethod => \'invoke_method', passthru => [ qw(VERSION import unimport DESTROY) ]; sub invoke_method { my ($invocant, $method_name, $args) = @_; ... return $rv; }
In a class using this dispatcher, any method not in the passthru specification is redirected to invoke_method, which can do any kind of ridiculous thing it wants.
invoke_method
Now you use the dispatcher:
package MyDOM; use MRO::Classless; use mro 'MRO::Classless'; 1;
...and...
use MyDOM; my $dom = MyDOM->new(type => 'root');
The new call will actually result in a call to invoke_method in the form:
new
invoke_method('MyDOM', 'new', [ type => 'root' ]);
Assuming it returns an object blessed into MyDOM, then:
$dom->children;
...will redispatch to:
invoke_method($dom, 'children', []);
For examples of more practical use, look at the test suite.
Ricardo SIGNES <rjbs@cpan.org>
This software is copyright (c) 2013 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install MRO::Magic, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MRO::Magic
CPAN shell
perl -MCPAN -e shell install MRO::Magic
For more information on module installation, please visit the detailed CPAN module installation guide.