+ if ($name =~ /^[^\w+-]$/) {
+ if (defined $cx && $cx == 26) {
+ if ($prefix eq '@') {
+ return "$prefix\{$name}";
+ }
+ elsif ($name eq '#') { return '${#}' } # "${#}a" vs "$#a"
+ }
+ if ($prefix eq '$#') {
+ return "\$#{$name}";
+ }
+ }
+
+ return $prefix . $self->maybe_qualify($prefix, $name);
+}
+
+# Return just the name, without the prefix. It may be returned as a quoted
+# string. The second return value is a boolean indicating that.
+sub stash_variable_name {
+ my($self, $prefix, $gv) = @_;
+ my $name = $self->gv_name($gv, 1);
+ $name = $self->maybe_qualify($prefix,$name);
+ if ($name =~ /^(?:\S|(?!\d)[\ca-\cz]?(?:\w|::)*|\d+)\z/) {
+ $name =~ s/^([\ca-\cz])/'^'.($1|'@')/e;
+ $name =~ /^(\^..|{)/ and $name = "{$name}";
+ return $name, 0; # not quoted
+ }
+ else {
+ single_delim("q", "'", $name), 1;
+ }
+}
+
+sub maybe_qualify {
+ my ($self,$prefix,$name) = @_;