package Template::Plugin::VMethods::VMethodContainer; sub new { my $class = shift; my $this = bless {}, $class; # what was this thing called? $this->{op} = shift; $this->{vmethname} = shift; # remember the stringification of the stash as an indentifier my $stash = shift; $this->{stash} = "$stash"; # stringify object ref # what are we replacing? $this->{sub} = shift; return $this; } # this function is used to work out if the passed stash is the # same stash that we were created in or a clone stash. It does # this by comparing the stringification of the ref sub stashmatch { my $this = shift; my $stash = shift; return "$stash" eq $this->{stash}; } sub DESTROY { my $this = shift; #print STDERR "DESTROYING $this->{op} $this->{vmethname}!\n"; no strict 'refs'; # work out where we're uninstalling to my $hashref = ${'Template::Stash::'.$this->{op}}; # replace the vmethod with what was there before. if (defined($this->{sub})) { $hashref->{ $this->{vmethname} } = $this->{sub}; } else { delete $hashref->{ $this->{vmethname} }; } } 1;