Take me over?
NAME
Class::MethodCache - Manipulate Perl's method resolution cache
SYNOPSIS
use Class::MethodCache;
DESCRIPTION
EXPORTS
High level API
- set_cached_method $glob, $coderef
-
Sets the CV slot of the glob to $coderef, and sets the cvgen slot of the glob to signify that this is a currently valid cache entry.
Overwriting a real method is an error. Use
set_cvgen
withget_class_gen
first to force this.Adding a cache entry to a shared GV (get_gv_refcount > 1) is an error, too, because the GV is shared by more than one stash and this will cause strange behavior. Use
set_cv
andset_cvgen
for that. Devel::Peek will probably tell you wtf is going on. - get_cached_method $glob
-
Gets the CV slot of the glob if this is a currently valid cache entry.
- update_cvgen $glob
-
Updates the cvgen slot to mark this cache entry as valid.
It is an error to update cvgen if it is not set but the CV slot is set, because that will overwrite a real method.
To force this behavior call
set_cvgen
withget_class_gen
. - delete_cv $glob
-
Remove the CV and reset the CVGEN of a glob.
Low level API
- get_class_gen $class
-
Returns the current class generation for a class.
This is like "get_pkg_gen" in mro (See also MRO::Compat).
This is equal to
PL_sub_generation
under perls predating mro, but still requires$class
to be passed in for consistency.This is provided mainly for convenience, for furthere manipuatlion of method caching please consult MRO::Compat, it has all the encessary functionality for manipulating cache invalidation. Using it in conjunction with Class::C3::XS is reccomended on perls below 5.9.5.
- get_cv $glob
-
This differs from
*{$glob}{CODE}
in that it will return the cached code ref if any, wheras accessing the code slot is more likeGvCVu(gv)
(which checks thatGvCVGEN
is == 0 first). - set_cv $glob, $coderef
-
Manipulate
GvCV
directly.A value of
undef
will clear the field. - get_cvgen $glob
-
Returns the cvgen slot of the gv.
- set_cvgen $glob, $uint
-
Manipulate
GvCVGEN
directly.Any value greater than zero implies the
GvCV
is a cache entry. IfGvCV
is not set then this is a cache of a failed lookup.
SEE ALSO
mro, MRO::Compat, Class::C3::XS
VERSION CONTROL
This module is maintained using Darcs. You can get the latest version from http://nothingmuch.woobling.org/code, and use darcs send
to commit changes.
AUTHOR
Yuval Kogman <nothingmuch@woobling.org>
COPYRIGHT
Copyright (c) 2008 Yuval Kogman. All rights reserved
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 148:
Expected text after =item, not a bullet