summaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2013-06-03 21:57:33 -0700
committerFather Chrysostomos <sprout@cpan.org>2013-06-03 22:36:37 -0700
commitbcbe2b27bd9868685fb7b4a6158b08674d0387cd (patch)
tree1a6ffd2524692c64c25674f66c7f69db32972c1a /dist
parent9b12f83b0b65827942028a14ac697977b5a83f3f (diff)
downloadperl-bcbe2b27bd9868685fb7b4a6158b08674d0387cd.tar.gz
[perl #117531] Deparse elements of %# correctly
They can only be referred to as $# {foo} and ${#}{foo}, not as $#{foo}, as that means $#foo.
Diffstat (limited to 'dist')
-rw-r--r--dist/B-Deparse/Deparse.pm4
-rw-r--r--dist/B-Deparse/t/deparse.t3
2 files changed, 6 insertions, 1 deletions
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'};