From bcbe2b27bd9868685fb7b4a6158b08674d0387cd Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 3 Jun 2013 21:57:33 -0700 Subject: [PATCH] [perl #117531] Deparse elements of %# correctly They can only be referred to as $# {foo} and ${#}{foo}, not as $#{foo}, as that means $#foo. --- dist/B-Deparse/Deparse.pm | 4 +++- dist/B-Deparse/t/deparse.t | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dist/B-Deparse/Deparse.pm b/dist/B-Deparse/Deparse.pm index b62976d054..bbb2453fe2 100644 --- a/dist/B-Deparse/Deparse.pm +++ b/dist/B-Deparse/Deparse.pm @@ -3515,7 +3515,9 @@ sub elem { } if (my $array_name=$self->elem_or_slice_array_name ($array, $left, $padname, 1)) { - return ($array_name =~ /->\z/ ? $array_name : "\$" . $array_name) + return ($array_name =~ /->\z/ + ? $array_name + : $array_name eq '#' ? '${#}' : "\$" . $array_name) . $left . $idx . $right; } else { # $x[20][3]{hi} or expr->[20] diff --git a/dist/B-Deparse/t/deparse.t b/dist/B-Deparse/t/deparse.t index 01bb74bdef..50874854b0 100644 --- a/dist/B-Deparse/t/deparse.t +++ b/dist/B-Deparse/t/deparse.t @@ -1410,3 +1410,6 @@ use feature 'state', 'lexical_subs'; no warnings 'experimental::lexical_subs'; state sub f {} print f(); +#### +# Elements of %# should not be confused with $#{ array } +() = ${#}{'foo'};