Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

monkey::patch(3pm) [debian man page]

Monkey::Patch(3pm)					User Contributed Perl Documentation					Monkey::Patch(3pm)

NAME
Monkey::Patch - Scoped monkeypatching (you can at least play nice) VERSION
version 0.03 SYNOPSIS
use Monkey::Patch qw(:all); sub some_subroutine { my $pkg = patch_class 'Some::Class' => 'something' => sub { my $original = shift; say "Whee!"; $original->(@_); }; Some::Class->something(); # says Whee! and does whatever undef $pkg; Some::Class->something(); # no longer says Whee! my $obj = Some::Class->new; my $obj2 = Some::Class->new; my $whoah = patch_object $obj, 'twiddle' => sub { my $original = shift; my $self = shift; say "Whoah!"; $self->$original(@_); }; $obj->twiddle(); # says Whoah! $obj2->twiddle(); # doesn't $obj->twiddle() # still does undef $whoah; $obj->twiddle(); # but not any more SUBROUTINES
The following subroutines are available (either individually or via :all) patch_package (package, subname, code) Wraps "package"'s subroutine named <subname> with your <code>. Your code recieves the original subroutine as its first argument, followed by any arguments the subroutine would have normally gotten. You can always call the subroutine ref your received; if there was no subroutine by that name, the coderef will simply do nothing. patch_class (class, methodname, code) Just like "patch_package", except that the @ISA chain is walked when you try to call the original subroutine if there wasn't any subroutine by that name in the package. patch_object (object, methodname, code) Just like "patch_class", except that your code will only get called on the object you pass, not the entire class. HANDLES
All the "patch" functions return a handle object. As soon as you lose the value of the handle (by calling in void context, assigning over the variable, undeffing the variable, letting it go out of scope, etc), the monkey patch is unwrapped. You can stack monkeypatches and let go of the handles in any order; they obey a stack discipline, and the most recent valid monkeypatch will always be called. Calling the "original" argument to your wrapper routine will always call the next-most-recent monkeypatched version (or, the original subroutine, of course). BUGS
This magic is only faintly black, but mucking around with the symbol table is not for the faint of heart. Help make this module better by reporting any strange behavior that you see! perl v5.10.1 2010-07-16 Monkey::Patch(3pm)

Check Out this Related Man Page

Class::MOP::Method(3)					User Contributed Perl Documentation				     Class::MOP::Method(3)

NAME
Class::MOP::Method - Method Meta Object VERSION
version 2.0604 DESCRIPTION
The Method Protocol is very small, since methods in Perl 5 are just subroutines in a specific package. We provide a very basic introspection interface. METHODS
Class::MOP::Method->wrap($code, %options) This is the constructor. It accepts a method body in the form of either a code reference or a Class::MOP::Method instance, followed by a hash of options. The options are: o name The method name (without a package name). This is required if $code is a coderef. o package_name The package name for the method. This is required if $code is a coderef. o associated_metaclass An optional Class::MOP::Class object. This is the metaclass for the method's class. $metamethod->clone(%params) This makes a shallow clone of the method object. In particular, subroutine reference itself is shared between all clones of a given method. When a method is cloned, the original method object will be available by calling "original_method" on the clone. $metamethod->body This returns a reference to the method's subroutine. $metamethod->name This returns the method's name $metamethod->package_name This returns the method's package name. $metamethod->fully_qualified_name This returns the method's fully qualified name (package name and method name). $metamethod->associated_metaclass This returns the Class::MOP::Class object for the method, if one exists. $metamethod->original_method If this method object was created as a clone of some other method object, this returns the object that was cloned. $metamethod->original_name This returns the method's original name, wherever it was first defined. If this method is a clone of a clone (of a clone, etc.), this method returns the name from the first method in the chain of clones. $metamethod->original_package_name This returns the method's original package name, wherever it was first defined. If this method is a clone of a clone (of a clone, etc.), this method returns the package name from the first method in the chain of clones. $metamethod->original_fully_qualified_name This returns the method's original fully qualified name, wherever it was first defined. If this method is a clone of a clone (of a clone, etc.), this method returns the fully qualified name from the first method in the chain of clones. $metamethod->is_stub Returns true if the method is just a stub: sub foo; $metamethod->attach_to_class($metaclass) Given a Class::MOP::Class object, this method sets the associated metaclass for the method. This will overwrite any existing associated metaclass. $metamethod->detach_from_class Removes any associated metaclass object for the method. $metamethod->execute(...) This executes the method. Any arguments provided will be passed on to the method itself. Class::MOP::Method->meta This will return a Class::MOP::Class instance for this class. It should also be noted that Class::MOP will actually bootstrap this module by installing a number of attribute meta-objects into its metaclass. AUTHOR
Moose is maintained by the Moose Cabal, along with the help of many contributors. See "CABAL" in Moose and "CONTRIBUTORS" in Moose for details. COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Infinity Interactive, Inc.. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. perl v5.16.2 2012-09-19 Class::MOP::Method(3)
Man Page