summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--t/uni/variables.t28
-rw-r--r--toke.c15
2 files changed, 33 insertions, 10 deletions
diff --git a/t/uni/variables.t b/t/uni/variables.t
index 9a469d6e42..cee681fd08 100644
--- a/t/uni/variables.t
+++ b/t/uni/variables.t
@@ -12,7 +12,7 @@ use utf8;
use open qw( :utf8 :std );
no warnings qw(misc reserved);
-plan (tests => 65856);
+plan (tests => 65869);
# ${single:colon} should not be valid syntax
{
@@ -201,3 +201,29 @@ EOP
);
}
}
+
+{
+ # bleadperl v5.17.9-109-g3283393 breaks JEREMY/File-Signature-1.009.tar.gz
+ # https://rt.perl.org/rt3/Ticket/Display.html?id=117145
+ local $@;
+ my $var = 10;
+ eval ' ${ var }';
+
+ is(
+ $@,
+ '',
+ '${ var } works under strict'
+ );
+
+ {
+ no strict;
+ for my $var ( '$', "\7LOBAL_PHASE", "^GLOBAL_PHASE", "^V" ) {
+ eval "\${ $var}";
+ is($@, '', "\${ $var} works" );
+ eval "\${$var }";
+ is($@, '', "\${$var } works" );
+ eval "\${ $var }";
+ is($@, '', "\${ $var } works" );
+ }
+ }
+}
diff --git a/toke.c b/toke.c
index 332f653734..66a197fc61 100644
--- a/toke.c
+++ b/toke.c
@@ -9292,6 +9292,8 @@ S_scan_ident(pTHX_ char *s, const char *send, char *dest, STRLEN destlen, I32 ck
if (*s == '{') {
bracket = s;
s++;
+ while (s < send && SPACE_OR_TAB(*s))
+ s++;
}
#define VALID_LEN_ONE_IDENT(d, u) (isPUNCT_A((U8)*(d)) \
@@ -9320,15 +9322,6 @@ S_scan_ident(pTHX_ char *s, const char *send, char *dest, STRLEN destlen, I32 ck
else if (ck_uni && !bracket)
check_uni();
if (bracket) {
- if (isSPACE(s[-1])) {
- while (s < send) {
- const char ch = *s++;
- if (!SPACE_OR_TAB(ch)) {
- *d = ch;
- break;
- }
- }
- }
if (isIDFIRST_lazy_if(d,is_utf8)) {
d += is_utf8 ? UTF8SKIP(d) : 1;
parse_ident(&s, &d, e, 1, is_utf8);
@@ -9364,6 +9357,10 @@ S_scan_ident(pTHX_ char *s, const char *send, char *dest, STRLEN destlen, I32 ck
Perl_croak(aTHX_ "%s", ident_too_long);
*d = '\0';
}
+
+ while (s < send && SPACE_OR_TAB(*s))
+ s++;
+
if (*s == '}') {
s++;
if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets) {