summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pp_hot.c10
-rw-r--r--t/lib/strict/refs8
-rw-r--r--t/uni/method.t4
3 files changed, 16 insertions, 6 deletions
diff --git a/pp_hot.c b/pp_hot.c
index 59268745b2..aaff28fbea 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2587,7 +2587,7 @@ PP(pp_entersub)
if (!sym)
DIE(aTHX_ PL_no_usym, "a subroutine");
if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
+ DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
break;
}
@@ -3006,10 +3006,10 @@ S_method_common(pTHX_ SV* meth, U32* hashp)
&& (ob = MUTABLE_SV(GvIO((const GV *)ob)))
&& SvOBJECT(ob))))
{
- const char * const name = SvPV_nolen_const(meth);
- Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
- (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
- name);
+ Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
+ SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
+ ? newSVpvs_flags("DOES", SVs_TEMP)
+ : meth));
}
stash = SvSTASH(ob);
diff --git a/t/lib/strict/refs b/t/lib/strict/refs
index 36b36f1e7b..09b962f71b 100644
--- a/t/lib/strict/refs
+++ b/t/lib/strict/refs
@@ -338,3 +338,11 @@ 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.
+########
+# pp_hot.c [pp_entersub]
+use strict 'refs';
+use utf8;
+use open qw( :utf8 :std );
+&{"F"};
+EXPECT
+Can't use string ("F") as a subroutine ref while "strict refs" in use at - line 5.
diff --git a/t/uni/method.t b/t/uni/method.t
index fdefbf501f..5009a1c924 100644
--- a/t/uni/method.t
+++ b/t/uni/method.t
@@ -15,7 +15,7 @@ use utf8;
use open qw( :utf8 :std );
no warnings 'once';
-plan(tests => 15);
+plan(tests => 16);
#Can't use bless yet, as it might not be clean
@@ -38,3 +38,5 @@ is(F->${\"b"}, "UTF8 Stash&meth", '..as does for ->${\""}');
eval { F->${\"b\0nul"} };
ok $@, "Even if both stash and method are in UTF-8, lookup is nul-clean";
+eval { my $ref = \my $var; $ref->method };
+like $@, qr/Can't call method "method" on unblessed reference /u;