From c076ab3e464716788eaf3c2c2539d06968ae611c Mon Sep 17 00:00:00 2001 From: Nicolas R Date: Tue, 2 Oct 2018 16:23:16 -0500 Subject: [PATCH] Avoid a dummy sub in Template::Parser This is an optimization which avoids creating an anonymous sub then call it inside an eval block. --- lib/Template/Parser.pm | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) 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);