diff options
-rw-r--r-- | t/lib/warnings/toke | 26 | ||||
-rw-r--r-- | toke.c | 10 |
2 files changed, 32 insertions, 4 deletions
diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke index 2214005260..5a4af815d3 100644 --- a/t/lib/warnings/toke +++ b/t/lib/warnings/toke @@ -268,6 +268,32 @@ Scalar value @a[3] better written as $a[3] at - line 3. Scalar value @a{3} better written as $a{3} at - line 4. ######## # toke.c +use utf8; +use open qw( :utf8 :std ); +use warnings 'syntax' ; +@à[3] = 2; +@à{3} = 2; +no warnings 'syntax' ; +@à[3] = 2; +@à{3} = 2; +EXPECT +Scalar value @à[3] better written as $à[3] at - line 5. +Scalar value @à{3} better written as $à{3} at - line 6. +######## +# toke.c +use utf8; +use open qw( :utf8 :std ); +use warnings 'syntax' ; +@ぁ[3] = 2; +@ぁ{3} = 2; +no warnings 'syntax' ; +@ぁ[3] = 2; +@ぁ{3} = 2; +EXPECT +Scalar value @ぁ[3] better written as $ぁ[3] at - line 5. +Scalar value @ぁ{3} better written as $ぁ{3} at - line 6. +######## +# toke.c use warnings 'syntax' ; $_ = "ab" ; s/(ab)/\1/e; @@ -6268,15 +6268,17 @@ Perl_yylex(pTHX) if (ckWARN(WARN_SYNTAX)) { const char *t = s + 1; while (*t && (isALNUM_lazy_if(t,UTF) || strchr(" \t$#+-'\"", *t))) - t++; + t += UTF ? UTF8SKIP(t) : 1; if (*t == '}' || *t == ']') { t++; PL_bufptr = PEEKSPACE(PL_bufptr); /* XXX can realloc */ /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "Scalar value %.*s better written as $%.*s", - (int)(t-PL_bufptr), PL_bufptr, - (int)(t-PL_bufptr-1), PL_bufptr+1); + "Scalar value %"SVf" better written as $%"SVf, + SVfARG(newSVpvn_flags(PL_bufptr, (STRLEN)(t-PL_bufptr), + SVs_TEMP | (UTF ? SVf_UTF8 : 0 ))), + SVfARG(newSVpvn_flags(PL_bufptr+1, (STRLEN)(t-PL_bufptr-1), + SVs_TEMP | (UTF ? SVf_UTF8 : 0 )))); } } } |