add an elipses to string/ref warnings when str longer than 32 chars
Yves Orton [Mon, 26 Oct 2009 20:52:05 +0000 (21:52 +0100)]
Wasted a few minutes more than necessary trying to work out why the
string was truncated when in fact it was the error message that was
truncating the string.

perl.h
pp.c
pp_hot.c
t/lib/strict/refs

diff --git a/perl.h b/perl.h
index 5e6f0a8..c4521aa 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -4211,9 +4211,9 @@ EXTCONST char PL_warn_nl[]
 EXTCONST char PL_no_wrongref[]
   INIT("Can't use %s ref as %s ref");
 EXTCONST char PL_no_symref[]
-  INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
+  INIT("Can't use string (\"%.32s\"%s) as %s ref while \"strict refs\" in use");
 EXTCONST char PL_no_symref_sv[]
-  INIT("Can't use string (\"%" SVf32 "\") as %s ref while \"strict refs\" in use");
+  INIT("Can't use string (\"%" SVf32 "\"%s) as %s ref while \"strict refs\" in use");
 EXTCONST char PL_no_usym[]
   INIT("Can't use an undefined value as %s reference");
 EXTCONST char PL_no_aelem[]
diff --git a/pp.c b/pp.c
index 6f56368..a2704af 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -202,7 +202,7 @@ PP(pp_rv2gv)
            }
            else {
                if (PL_op->op_private & HINT_STRICT_REFS)
-                   DIE(aTHX_ PL_no_symref_sv, sv, "a symbol");
+                   DIE(aTHX_ PL_no_symref_sv, 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
@@ -232,7 +232,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_ PL_no_symref_sv, sv, what);
+           Perl_die(aTHX_ PL_no_symref_sv, sv, (SvCUR(sv)>32 ? "..." : ""), what);
        else
            Perl_die(aTHX_ PL_no_usym, what);
     }
index 16992d4..0730aff 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2700,7 +2700,7 @@ PP(pp_entersub)
            if (!sym)
                DIE(aTHX_ PL_no_usym, "a subroutine");
            if (PL_op->op_private & HINT_STRICT_REFS)
-               DIE(aTHX_ PL_no_symref, sym, "a subroutine");
+               DIE(aTHX_ PL_no_symref, sym, len>32 ? "..." : "", "a subroutine");
            cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
            break;
        }
index 075ca49..e8f7566 100644 (file)
@@ -19,6 +19,14 @@ EXPECT
 
 # strict refs - error
 use strict ;
+my $str="A::Really::Big::Package::Name::To::Use"; 
+$str->{foo}= 1;
+EXPECT
+Can't use string ("A::Really::Big::Package::Name::T"...) as a HASH ref while "strict refs" in use at - line 5.
+########
+
+# strict refs - error
+use strict ;
 my $fred ;
 my $a = ${"fred"} ;
 EXPECT