This can get awfully tedious very soon when you're attempting to re-wrap a class with many subroutines in it. Because of this Template::Plugin::VMethods allows you to use a special variable $VMETHOD_PACKAGE which can be used to alter the package this module uses to find named VMethods.

This module has an 'import' and a 'new' method; If you implement any of these in your subclass you'll need to chain the methods like this:

sub new
{
my $class = shift;
my $this = $class->SUPER::new(@_);
...
}

Even if you manually redefine a VMethod that this module has defined (by manually assigning to the $Template::Stash::*_OPS variables) then that VMethod will still be restored to the value that it had before the USE statement that installed the VMethod you are overriding as soon as you leave the template that that USE method was declared in.

Sharing $Template::Stash::*_OPS across threads will really screw this whole system up; But you weren't going to do that anyway, were you?