diff --git a/lib/Template/Parser.pm b/lib/Template/Parser.pm index ec4f99ecb..c9deb0d5e 100644 --- a/lib/Template/Parser.pm +++ b/lib/Template/Parser.pm @@ -954,22 +954,27 @@ sub _parse { or $status = ACCEPT; # use dummy sub if code ref doesn't exist - $code = sub { $_[1] } - unless $code; - - @codevars = $len - ? map { $_->[1] } @$stack[ -$len .. -1 ] - : (); - - eval { - $coderet = &$code( $self, @codevars ); - }; - if ($@) { - my $err = $@; - chomp $err; - return $self->_parse_error($err); + if ( !$code ) { + $coderet = $len ? $stack->[ -$len ]->[1] : undef; + } else { + # $code = sub { $_[1] } + # unless $code; + + @codevars = $len + ? map { $_->[1] } @$stack[ -$len .. -1 ] + : (); + + eval { + $coderet = &$code( $self, @codevars ); + }; + if ($@) { + my $err = $@; + chomp $err; + return $self->_parse_error($err); + } } + # reduce stack by $len splice(@$stack, -$len, $len);