This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
documentation tweaks for UTF-EBCDIC support
[perl5.git] / pod / perlunicode.pod
CommitLineData
393fec97
GS
1=head1 NAME
2
3perlunicode - Unicode support in Perl
4
5=head1 DESCRIPTION
6
0a1f2d14 7=head2 Important Caveats
21bad921 8
0a1f2d14
NIS
9WARNING: While the implementation of Unicode support in Perl is now fairly
10complete it is still evolving to some extent.
21bad921 11
0a1f2d14
NIS
12In particular the way Unicode is handled on EBCDIC platforms is still rather
13experimental. On such a platform references to UTF-8 encoding in this
14document and elsewhere should be read as meaning UTF-EBCDIC as specified
15in Unicode Technical Report 16 unless ASCII vs EBCDIC issues are specifically
16discussed. There is no C<utfebcdic> pragma or ":utfebcdic" layer, rather
17"utf8" and ":utf8" are re-used to mean platform's "natural" 8-bit encoding
18of Unicode. See L<perlebcdic> for more discussion of the issues.
19
20The following areas are still under development.
21bad921 21
13a2d996 22=over 4
21bad921
GS
23
24=item Input and Output Disciplines
25
0a1f2d14
NIS
26A filehandle can be marked as containing perl's internal Unicode encoding
27(UTF-8 or UTF-EBCDIC) by opening it with the ":utf8" layer.
28Other encodings can be converted to perl's encoding on input, or from
29perl's encoding on output by use of the ":encoding()" layer.
30There is not yet a clean way to mark the perl source itself as being
31in an particular encoding.
21bad921
GS
32
33=item Regular Expressions
34
e6739005
JH
35The regular expression compiler does now attempt to produce
36polymorphic opcodes. That is the pattern should now adapt to the data
37and automatically switch to the Unicode character scheme when presented
38with Unicode data, or a traditional byte scheme when presented with
39byte data. The implementation is still new and (particularly on
40EBCDIC platforms) may need further work.
21bad921
GS
41
42=item C<use utf8> still needed to enable a few features
43
44The C<utf8> pragma implements the tables used for Unicode support. These
45tables are automatically loaded on demand, so the C<utf8> pragma need not
46normally be used.
47
48However, as a compatibility measure, this pragma must be explicitly used
49to enable recognition of UTF-8 encoded literals and identifiers in the
b3419ed8
PK
50source text on ASCII based machines or recognize UTF-EBCDIC encoded literals
51and identifiers on EBCDIC based machines.
21bad921
GS
52
53=back
54
55=head2 Byte and Character semantics
393fec97
GS
56
57Beginning with version 5.6, Perl uses logically wide characters to
58represent strings internally. This internal representation of strings
b3419ed8 59uses either the UTF-8 or the UTF-EBCDIC encoding.
393fec97 60
21bad921 61In future, Perl-level operations can be expected to work with characters
393fec97
GS
62rather than bytes, in general.
63
8cbd9a7a
GS
64However, as strictly an interim compatibility measure, Perl v5.6 aims to
65provide a safe migration path from byte semantics to character semantics
66for programs. For operations where Perl can unambiguously decide that the
67input data is characters, Perl now switches to character semantics.
68For operations where this determination cannot be made without additional
69information from the user, Perl decides in favor of compatibility, and
70chooses to use byte semantics.
71
72This behavior preserves compatibility with earlier versions of Perl,
73which allowed byte semantics in Perl operations, but only as long as
74none of the program's inputs are marked as being as source of Unicode
75character data. Such data may come from filehandles, from calls to
76external programs, from information provided by the system (such as %ENV),
21bad921 77or from literals and constants in the source text.
8cbd9a7a 78
46487f74
GS
79If the C<-C> command line switch is used, (or the ${^WIDE_SYSTEM_CALLS}
80global flag is set to C<1>), all system calls will use the
3969a896 81corresponding wide character APIs. This is currently only implemented
e6739005 82on Windows since UNIXes lack API standard on this area.
8cbd9a7a 83
8058d7ab
GS
84Regardless of the above, the C<bytes> pragma can always be used to force
85byte semantics in a particular lexical scope. See L<bytes>.
8cbd9a7a
GS
86
87The C<utf8> pragma is primarily a compatibility device that enables
b3419ed8 88recognition of UTF-(8|EBCDIC) in literals encountered by the parser. It may also
21bad921 89be used for enabling some of the more experimental Unicode support features.
8cbd9a7a
GS
90Note that this pragma is only required until a future version of Perl
91in which character semantics will become the default. This pragma may
92then become a no-op. See L<utf8>.
93
94Unless mentioned otherwise, Perl operators will use character semantics
95when they are dealing with Unicode data, and byte semantics otherwise.
96Thus, character semantics for these operations apply transparently; if
97the input data came from a Unicode source (for example, by adding a
98character encoding discipline to the filehandle whence it came, or a
99literal UTF-8 string constant in the program), character semantics
100apply; otherwise, byte semantics are in effect. To force byte semantics
8058d7ab 101on Unicode data, the C<bytes> pragma should be used.
393fec97
GS
102
103Under character semantics, many operations that formerly operated on
104bytes change to operating on characters. For ASCII data this makes
105no difference, because UTF-8 stores ASCII in single bytes, but for
21bad921 106any character greater than C<chr(127)>, the character may be stored in
393fec97 107a sequence of two or more bytes, all of which have the high bit set.
b3419ed8
PK
108For C1 controls or Latin 1 characters on an EBCDIC platform the character
109may be stored in a UTF-EBCDIC multi byte sequence.
393fec97
GS
110But by and large, the user need not worry about this, because Perl
111hides it from the user. A character in Perl is logically just a number
112ranging from 0 to 2**32 or so. Larger characters encode to longer
113sequences of bytes internally, but again, this is just an internal
114detail which is hidden at the Perl level.
115
8cbd9a7a 116=head2 Effects of character semantics
393fec97
GS
117
118Character semantics have the following effects:
119
120=over 4
121
122=item *
123
124Strings and patterns may contain characters that have an ordinal value
21bad921 125larger than 255.
393fec97
GS
126
127Presuming you use a Unicode editor to edit your program, such characters
b3419ed8 128will typically occur directly within the literal strings as UTF-(8|EBCDIC)
393fec97 129characters, but you can also specify a particular character with an
b3419ed8 130extension of the C<\x> notation. UTF-X characters are specified by
393fec97 131putting the hexadecimal code within curlies after the C<\x>. For instance,
4375e838 132a Unicode smiley face is C<\x{263A}>.
393fec97
GS
133
134=item *
135
136Identifiers within the Perl script may contain Unicode alphanumeric
137characters, including ideographs. (You are currently on your own when
138it comes to using the canonical forms of characters--Perl doesn't (yet)
139attempt to canonicalize variable names for you.)
140
393fec97
GS
141=item *
142
143Regular expressions match characters instead of bytes. For instance,
144"." matches a character instead of a byte. (However, the C<\C> pattern
945c54fd
JH
145is provided to force a match a single byte ("C<char>" in C, hence
146C<\C>).)
393fec97 147
393fec97
GS
148=item *
149
150Character classes in regular expressions match characters instead of
151bytes, and match against the character properties specified in the
152Unicode properties database. So C<\w> can be used to match an ideograph,
153for instance.
154
393fec97
GS
155=item *
156
157Named Unicode properties and block ranges make be used as character
158classes via the new C<\p{}> (matches property) and C<\P{}> (doesn't
159match property) constructs. For instance, C<\p{Lu}> matches any
160character with the Unicode uppercase property, while C<\p{M}> matches
161any mark character. Single letter properties may omit the brackets, so
162that can be written C<\pM> also. Many predefined character classes are
163available, such as C<\p{IsMirrored}> and C<\p{InTibetan}>.
164
393fec97
GS
165=item *
166
167The special pattern C<\X> match matches any extended Unicode sequence
168(a "combining character sequence" in Standardese), where the first
169character is a base character and subsequent characters are mark
170characters that apply to the base character. It is equivalent to
171C<(?:\PM\pM*)>.
172
393fec97
GS
173=item *
174
383e7cdd
JH
175The C<tr///> operator translates characters instead of bytes. Note
176that the C<tr///CU> functionality has been removed, as the interface
177was a mistake. For similar functionality see pack('U0', ...) and
178pack('C0', ...).
393fec97 179
393fec97
GS
180=item *
181
182Case translation operators use the Unicode case translation tables
183when provided character input. Note that C<uc()> translates to
184uppercase, while C<ucfirst> translates to titlecase (for languages
185that make the distinction). Naturally the corresponding backslash
186sequences have the same semantics.
187
188=item *
189
190Most operators that deal with positions or lengths in the string will
191automatically switch to using character positions, including C<chop()>,
192C<substr()>, C<pos()>, C<index()>, C<rindex()>, C<sprintf()>,
193C<write()>, and C<length()>. Operators that specifically don't switch
194include C<vec()>, C<pack()>, and C<unpack()>. Operators that really
195don't care include C<chomp()>, as well as any other operator that
196treats a string as a bucket of bits, such as C<sort()>, and the
197operators dealing with filenames.
198
199=item *
200
201The C<pack()>/C<unpack()> letters "C<c>" and "C<C>" do I<not> change,
202since they're often used for byte-oriented formats. (Again, think
203"C<char>" in the C language.) However, there is a new "C<U>" specifier
204that will convert between UTF-8 characters and integers. (It works
205outside of the utf8 pragma too.)
206
207=item *
208
209The C<chr()> and C<ord()> functions work on characters. This is like
210C<pack("U")> and C<unpack("U")>, not like C<pack("C")> and
211C<unpack("C")>. In fact, the latter are how you now emulate
212byte-oriented C<chr()> and C<ord()> under utf8.
213
214=item *
215
a1ca4561
YST
216The bit string operators C<& | ^ ~> can operate on character data.
217However, for backward compatibility reasons (bit string operations
218when the characters all are less than 256 in ordinal value) one cannot
219mix C<~> (the bit complement) and characters both less than 256 and
220equal or greater than 256. Most importantly, the DeMorgan's laws
221(C<~($x|$y) eq ~$x&~$y>, C<~($x&$y) eq ~$x|~$y>) won't hold.
222Another way to look at this is that the complement cannot return
223B<both> the 8-bit (byte) wide bit complement, and the full character
224wide bit complement.
225
226=item *
227
393fec97
GS
228And finally, C<scalar reverse()> reverses by character rather than by byte.
229
230=back
231
8cbd9a7a
GS
232=head2 Character encodings for input and output
233
945c54fd 234[XXX: This feature is not yet implemented.]
8cbd9a7a 235
393fec97
GS
236=head1 CAVEATS
237
238As of yet, there is no method for automatically coercing input and
b3419ed8
PK
239output to some encoding other than UTF-8 or UTF-EBCDIC. This is planned
240in the near future, however.
393fec97 241
8cbd9a7a
GS
242Whether an arbitrary piece of data will be treated as "characters" or
243"bytes" by internal operations cannot be divined at the current time.
393fec97
GS
244
245Use of locales with utf8 may lead to odd results. Currently there is
246some attempt to apply 8-bit locale info to characters in the range
2470..255, but this is demonstrably incorrect for locales that use
248characters above that range (when mapped into Unicode). It will also
249tend to run slower. Avoidance of locales is strongly encouraged.
250
251=head1 SEE ALSO
252
8058d7ab 253L<bytes>, L<utf8>, L<perlvar/"${^WIDE_SYSTEM_CALLS}">
393fec97
GS
254
255=cut