diff options
author | Rafael Garcia-Suarez <rgs@consttype.org> | 2010-04-09 14:19:00 +0200 |
---|---|---|
committer | Jesse Vincent <jesse@bestpractical.com> | 2010-04-09 23:19:18 -0400 |
commit | 10b53e54b35afb95d0539352073152024b143922 (patch) | |
tree | 1cd696c663d9fd26b09e0611c3046d5be9cd57d4 | |
parent | 82d57a628cbdfec7d17606e2fd25bc46f0713b89 (diff) | |
download | perl-10b53e54b35afb95d0539352073152024b143922.tar.gz |
[perl #74168] Assertion failure when emitting a stricture error message
-rw-r--r-- | pp.c | 4 | ||||
-rw-r--r-- | t/lib/strict/refs | 6 |
2 files changed, 8 insertions, 2 deletions
@@ -207,7 +207,7 @@ PP(pp_rv2gv) } else { if (PL_op->op_private & HINT_STRICT_REFS) - DIE(aTHX_ S_no_symref_sv, sv, (SvCUR(sv)>32 ? "..." : ""), "a symbol"); + DIE(aTHX_ S_no_symref_sv, sv, (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""), "a symbol"); if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV)) == OPpDONT_INIT_GV) { /* We are the target of a coderef assignment. Return @@ -237,7 +237,7 @@ Perl_softref2xv(pTHX_ SV *const sv, const char *const what, if (PL_op->op_private & HINT_STRICT_REFS) { if (SvOK(sv)) - Perl_die(aTHX_ S_no_symref_sv, sv, (SvCUR(sv)>32 ? "..." : ""), what); + Perl_die(aTHX_ S_no_symref_sv, sv, (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""), what); else Perl_die(aTHX_ PL_no_usym, what); } diff --git a/t/lib/strict/refs b/t/lib/strict/refs index e8f75660b8..ada170e902 100644 --- a/t/lib/strict/refs +++ b/t/lib/strict/refs @@ -332,3 +332,9 @@ EXPECT defined(%hash) is deprecated at - line 4. (Maybe you should just omit the defined()?) Can't use string ("foo") as a HASH ref while "strict refs" in use at - line 4. +######## +# [perl #37886] strict 'refs' doesn't apply inside definedlssertion failed: (SvTYPE(_svcur) >= SVt_PV), function Perl_softref2xv, file pp.c, line 240. +use strict 'refs'; +my $o = 1 ; $o->{1} ; +EXPECT +Can't use string ("1") as a HASH ref while "strict refs" in use at - line 3. |