tmps = SvPV_const(sv, len);
if (PerlIO_isutf8(fp)) {
if (!SvUTF8(sv)) {
- const STRLEN origlen = len;
/* We don't modify the original scalar. */
tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
tmps = (char *) tmpbuf;
- if (ckWARN(WARN_UTF8) && len != origlen) {
- Perl_warner(aTHX_ packWARN(WARN_UTF8),
- "Variable length character upgraded in print");
- }
}
}
else if (DO_UTF8(sv)) {
=head1 New or Changed Diagnostics
-=head2 Variable length character upgraded in print
-
-This new UTF-8 warning indicates a situation where a non-Unicode string is
-sent to a UTF-8 output layer, but given what the string contains, encoding
-problems such as double UTF-8 encoding might arise. See L<perldiag>.
-
=head1 Changed Internals
The anonymous hash and array constructors now take 1 op in the optree
(F) Lookbehind is allowed only for subexpressions whose length is fixed and
known at compile time. See L<perlre>.
-=item Variable length character upgraded in print
-
-(W utf8) Perl met a variable length character that is not marked with
-Unicode in the output, but the output layer (like the C<:utf8> layer) does
-not expect that. (A variable length character is defined by having
-different memory representations between the native encoding (ISO-8859-1
-or single-byte EBCDIC) and perl's Unicode encoding (UTF-8 or UTF-EBCDIC).)
-Perl assumes any strings that are not marked as Unicode to be encoded in
-the native encoding, and implicitly converts (upgrades) them into perl's
-Unicode encoding on print. If you had intended to treat them as Unicode
-strings, you might have failed to cope with them properly.
-
=item "%s" variable %s masks earlier declaration in same %s
(W misc) A "my" or "our" variable has been redeclared in the current