MRO::Magic - write your own method dispatcher
version 0.100002
This module is shipped with no promise about what version of perl it will require in the future. In practice, this tends to mean "you need a perl from the last three years," but you can't rely on that. If a new version of perl ship, this software may begin to require it for any reason, and there is no promise that patches will be accepted to lower the minimum required perl.
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 <cpan@semiotic.systems>
Ricardo Signes <rjbs@semiotic.systems>
This software is copyright (c) 2022 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.