| Class::MOP::Immutable - A class to transform Class::MOP::Class metaclasses |
Class::MOP::Immutable - A class to transform Class::MOP::Class metaclasses
use Class::MOP::Immutable;
my $immutable_metaclass = Class::MOP::Immutable->new($metaclass, {
read_only => [qw/superclasses/],
cannot_call => [qw/
add_method
alias_method
remove_method
add_attribute
remove_attribute
add_package_symbol
remove_package_symbol
/],
memoize => {
class_precedence_list => 'ARRAY',
compute_all_applicable_attributes => 'ARRAY',
get_meta_instance => 'SCALAR',
get_method_map => 'SCALAR',
}
});
$immutable_metaclass->make_metaclass_immutable(@_)
This is basically a module for applying a transformation on a given metaclass. Current features include making methods read-only, making methods un-callable and memoizing methods (in a type specific way too).
This module is not for the feint of heart, it does some whacky things to the metaclass in order to make it immutable. If you are just curious, I suggest you turn back now, there is nothing to see here.
$metaclass and a set of %options this module will
prepare an immutable version of the $metaclass, which can then
be applied to the $metaclass using the make_metaclass_immutable
method.
new.
new.
new.
$metaclass, but will
not actually change the original metaclass.
%options passed into new.
$metaclass into the immutable version.
$metaclass into the mutable version by reversing
the immutable process. %options should be the same options that were
given to make_metaclass_immutable.
Stevan Little <stevan@iinteractive.com>
Copyright 2006-2008 by Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Class::MOP::Immutable - A class to transform Class::MOP::Class metaclasses |