use strict; use warnings; package Template::Capturing::Stash; { use base 'Template::Stash'; our %remembering_hash; sub get { die if @_ != 2; my ( $self, $var_name ) = @_; my $var_value = $self->SUPER::get($var_name); if ( ref $var_name eq 'ARRAY' ) { $var_name = compound_var( @{$var_name} ); } #print "! Get of $var_name = $var_value\n"; $remembering_hash{$var_name} = $var_value; return $var_value; } sub set { die if @_ < 3 or @_ > 4; my ( $self, $var_name, $var_value, $default ) = @_; die "Not yet coded to handle default" if defined $default; my $return_value = $self->SUPER::set( $var_name, $var_value ); if ( ref $var_name eq 'ARRAY' ) { $var_name = compound_var( @{$var_name} ); } #print "! Set of $var_name = $var_value\n"; $remembering_hash{$var_name} = $var_value; return $return_value; } sub compound_var { my @var_name = @_; my @compound_var; foreach my $element ( @var_name ) { unless ( $element eq '0' ) { if ( ref $element eq 'ARRAY' ) { $element = compound_var( @{$element} ); } push @compound_var, $element; } } return join '.', @compound_var; } } 1;