diff options
Diffstat (limited to 'lib/Eval/Closure.pm')
-rw-r--r-- | lib/Eval/Closure.pm | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm index 161bcdf..46a3448 100644 --- a/lib/Eval/Closure.pm +++ b/lib/Eval/Closure.pm @@ -100,12 +100,23 @@ sub eval_closure { $args{source} = _canonicalize_source($args{source}); _validate_env($args{environment} ||= {}); + my $should_set_description = defined $args{description} && !($^P & 0x10); + $args{source} = _line_directive(@args{qw(line description)}) . $args{source} - if defined $args{description} && !($^P & 0x10); + if $should_set_description; + + my $existed_before; + $existed_before = exists $::{"_<$args{description}"} + if $should_set_description; my ($code, $e) = _clean_eval_closure(@args{qw(source environment)}); + if (!$existed_before && $should_set_description) { + # this will be meaningless, and just leaks memory + delete $::{"_<$args{description}"}; + } + if (!$code) { if ($args{terse_error}) { die "$e\n"; |