summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doio.c3
-rw-r--r--pod/perldiag.pod4
-rw-r--r--sv.c9
3 files changed, 14 insertions, 2 deletions
diff --git a/doio.c b/doio.c
index 2f78bc9509..52dfd6db7d 100644
--- a/doio.c
+++ b/doio.c
@@ -1186,6 +1186,9 @@ Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
}
/* FALL THROUGH */
default:
+ /* XXX Fix this when the I/O disciplines arrive. XXX */
+ if (DO_UTF8(sv))
+ sv_utf8_downgrade(sv, FALSE);
tmps = SvPV(sv, len);
break;
}
diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index c4d26548bc..480ab8492d 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -3822,6 +3822,10 @@ but in actual fact, you got
So put in parentheses to say what you really mean.
+=item Wide character in %s
+
+(F) Perl met a wide character (>255) when it wasn't expecting one.
+
=item write() on closed filehandle %s
(W closed) The filehandle you're writing to got itself closed sometime
diff --git a/sv.c b/sv.c
index 21b6758342..b795b299f3 100644
--- a/sv.c
+++ b/sv.c
@@ -2448,8 +2448,13 @@ Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
if (!utf8_to_bytes((U8*)c, &len)) {
if (fail_ok)
return FALSE;
- else
- Perl_croak(aTHX_ "big byte");
+ else {
+ if (PL_op)
+ Perl_croak(aTHX_ "Wide character in %s",
+ PL_op_desc[PL_op->op_type]);
+ else
+ Perl_croak(aTHX_ "Wide character");
+ }
}
SvCUR(sv) = len - 1;
SvUTF8_off(sv);