summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgs@consttype.org>2010-04-09 14:19:00 +0200
committerJesse Vincent <jesse@bestpractical.com>2010-04-09 23:19:18 -0400
commit10b53e54b35afb95d0539352073152024b143922 (patch)
tree1cd696c663d9fd26b09e0611c3046d5be9cd57d4
parent82d57a628cbdfec7d17606e2fd25bc46f0713b89 (diff)
downloadperl-10b53e54b35afb95d0539352073152024b143922.tar.gz
[perl #74168] Assertion failure when emitting a stricture error message
-rw-r--r--pp.c4
-rw-r--r--t/lib/strict/refs6
2 files changed, 8 insertions, 2 deletions
diff --git a/pp.c b/pp.c
index e4660b31f2..df8f048b2e 100644
--- a/pp.c
+++ b/pp.c
@@ -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.