This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlport updates (from Peter Prymmer)
[perl5.git] / pod / perlunicode.pod
CommitLineData
393fec97
GS
1=head1 NAME
2
3perlunicode - Unicode support in Perl
4
5=head1 DESCRIPTION
6
7WARNING: The implementation of Unicode support in Perl is incomplete.
8Expect sudden and unannounced changes!
9
10Beginning with version 5.6, Perl uses logically wide characters to
11represent strings internally. This internal representation of strings
12uses the UTF-8 encoding.
13
14In future, Perl-level operations will expect to work with characters
15rather than bytes, in general.
16
8cbd9a7a
GS
17However, as strictly an interim compatibility measure, Perl v5.6 aims to
18provide a safe migration path from byte semantics to character semantics
19for programs. For operations where Perl can unambiguously decide that the
20input data is characters, Perl now switches to character semantics.
21For operations where this determination cannot be made without additional
22information from the user, Perl decides in favor of compatibility, and
23chooses to use byte semantics.
24
25This behavior preserves compatibility with earlier versions of Perl,
26which allowed byte semantics in Perl operations, but only as long as
27none of the program's inputs are marked as being as source of Unicode
28character data. Such data may come from filehandles, from calls to
29external programs, from information provided by the system (such as %ENV),
30or from literals and constants in the source text. Later, in
31L</Character encodings for input and output>, we'll see how such
32inputs may be marked as being Unicode character data sources.
33
3969a896
GS
34If the C<$^U> global flag is set to C<1>, all system calls will use the
35corresponding wide character APIs. This is currently only implemented
36on Windows. [XXX: Should there be a -C switch to enable $^U?]
8cbd9a7a
GS
37
38Regardless of the above, the C<byte> pragma can always be used to force
39byte semantics in a particular lexical scope. See L<byte>.
40
41The C<utf8> pragma is primarily a compatibility device that enables
42recognition of UTF-8 in literals encountered by the parser. It is also
43used for enabling some of the more experimental Unicode support features.
44Note that this pragma is only required until a future version of Perl
45in which character semantics will become the default. This pragma may
46then become a no-op. See L<utf8>.
47
48Unless mentioned otherwise, Perl operators will use character semantics
49when they are dealing with Unicode data, and byte semantics otherwise.
50Thus, character semantics for these operations apply transparently; if
51the input data came from a Unicode source (for example, by adding a
52character encoding discipline to the filehandle whence it came, or a
53literal UTF-8 string constant in the program), character semantics
54apply; otherwise, byte semantics are in effect. To force byte semantics
55on Unicode data, the C<byte> pragma should be used.
393fec97
GS
56
57Under character semantics, many operations that formerly operated on
58bytes change to operating on characters. For ASCII data this makes
59no difference, because UTF-8 stores ASCII in single bytes, but for
60any character greater than C<chr(127)>, the character is stored in
61a sequence of two or more bytes, all of which have the high bit set.
62But by and large, the user need not worry about this, because Perl
63hides it from the user. A character in Perl is logically just a number
64ranging from 0 to 2**32 or so. Larger characters encode to longer
65sequences of bytes internally, but again, this is just an internal
66detail which is hidden at the Perl level.
67
8cbd9a7a 68=head2 Effects of character semantics
393fec97
GS
69
70Character semantics have the following effects:
71
72=over 4
73
74=item *
75
76Strings and patterns may contain characters that have an ordinal value
77larger than 255. In Perl v5.6, this is only enabled if the lexical
78scope has a C<use utf8> declaration (due to compatibility needs) but
79future versions may enable this by default.
80
81Presuming you use a Unicode editor to edit your program, such characters
82will typically occur directly within the literal strings as UTF-8
83characters, but you can also specify a particular character with an
84extension of the C<\x> notation. UTF-8 characters are specified by
85putting the hexadecimal code within curlies after the C<\x>. For instance,
86a Unicode smiley face is C<\x{263A}>. A character in the Latin-1 range
87(128..255) should be written C<\x{ab}> rather than C<\xab>, since the
88former will turn into a two-byte UTF-8 code, while the latter will
89continue to be interpreted as generating a 8-bit byte rather than a
90character. In fact, if C<-w> is turned on, it will produce a warning
91that you might be generating invalid UTF-8.
92
93=item *
94
95Identifiers within the Perl script may contain Unicode alphanumeric
96characters, including ideographs. (You are currently on your own when
97it comes to using the canonical forms of characters--Perl doesn't (yet)
98attempt to canonicalize variable names for you.)
99
8cbd9a7a 100This also needs C<use utf8> currently. [XXX: Why?!? High-bit chars were
393fec97 101syntax errors when they occurred within identifiers in previous versions,
8cbd9a7a 102so this should probably be enabled by default.]
393fec97
GS
103
104=item *
105
106Regular expressions match characters instead of bytes. For instance,
107"." matches a character instead of a byte. (However, the C<\C> pattern
108is provided to force a match a single byte ("C<char>" in C, hence
109C<\C>).)
110
111Unicode support in regular expressions needs C<use utf8> currently.
112[XXX: Because the SWASH routines need to be loaded. And the RE engine
8cbd9a7a
GS
113appears to need an overhaul to dynamically match Unicode anyway--the
114current RE compiler creates different nodes with and without C<use utf8>.]
393fec97
GS
115
116=item *
117
118Character classes in regular expressions match characters instead of
119bytes, and match against the character properties specified in the
120Unicode properties database. So C<\w> can be used to match an ideograph,
121for instance.
122
123C<use utf8> is needed to enable this. See above.
124
125=item *
126
127Named Unicode properties and block ranges make be used as character
128classes via the new C<\p{}> (matches property) and C<\P{}> (doesn't
129match property) constructs. For instance, C<\p{Lu}> matches any
130character with the Unicode uppercase property, while C<\p{M}> matches
131any mark character. Single letter properties may omit the brackets, so
132that can be written C<\pM> also. Many predefined character classes are
133available, such as C<\p{IsMirrored}> and C<\p{InTibetan}>.
134
135C<use utf8> is needed to enable this. See above.
136
137=item *
138
139The special pattern C<\X> match matches any extended Unicode sequence
140(a "combining character sequence" in Standardese), where the first
141character is a base character and subsequent characters are mark
142characters that apply to the base character. It is equivalent to
143C<(?:\PM\pM*)>.
144
145C<use utf8> is needed to enable this. See above.
146
147=item *
148
149The C<tr///> operator translates characters instead of bytes. It can also
150be forced to translate between 8-bit codes and UTF-8 regardless of the
151surrounding utf8 state. For instance, if you know your input in Latin-1,
152you can say:
153
154 use utf8;
155 while (<>) {
156 tr/\0-\xff//CU; # latin1 char to utf8
157 ...
158 }
159
160Similarly you could translate your output with
161
162 tr/\0-\x{ff}//UC; # utf8 to latin1 char
163
164No, C<s///> doesn't take /U or /C (yet?).
165
166C<use utf8> is needed to enable this. See above.
167
168=item *
169
170Case translation operators use the Unicode case translation tables
171when provided character input. Note that C<uc()> translates to
172uppercase, while C<ucfirst> translates to titlecase (for languages
173that make the distinction). Naturally the corresponding backslash
174sequences have the same semantics.
175
176=item *
177
178Most operators that deal with positions or lengths in the string will
179automatically switch to using character positions, including C<chop()>,
180C<substr()>, C<pos()>, C<index()>, C<rindex()>, C<sprintf()>,
181C<write()>, and C<length()>. Operators that specifically don't switch
182include C<vec()>, C<pack()>, and C<unpack()>. Operators that really
183don't care include C<chomp()>, as well as any other operator that
184treats a string as a bucket of bits, such as C<sort()>, and the
185operators dealing with filenames.
186
187=item *
188
189The C<pack()>/C<unpack()> letters "C<c>" and "C<C>" do I<not> change,
190since they're often used for byte-oriented formats. (Again, think
191"C<char>" in the C language.) However, there is a new "C<U>" specifier
192that will convert between UTF-8 characters and integers. (It works
193outside of the utf8 pragma too.)
194
195=item *
196
197The C<chr()> and C<ord()> functions work on characters. This is like
198C<pack("U")> and C<unpack("U")>, not like C<pack("C")> and
199C<unpack("C")>. In fact, the latter are how you now emulate
200byte-oriented C<chr()> and C<ord()> under utf8.
201
202=item *
203
204And finally, C<scalar reverse()> reverses by character rather than by byte.
205
206=back
207
8cbd9a7a
GS
208=head2 Character encodings for input and output
209
210[XXX: This feature is not yet implemented.]
211
393fec97
GS
212=head1 CAVEATS
213
214As of yet, there is no method for automatically coercing input and
215output to some encoding other than UTF-8. This is planned in the near
216future, however.
217
8cbd9a7a
GS
218Whether an arbitrary piece of data will be treated as "characters" or
219"bytes" by internal operations cannot be divined at the current time.
393fec97
GS
220
221Use of locales with utf8 may lead to odd results. Currently there is
222some attempt to apply 8-bit locale info to characters in the range
2230..255, but this is demonstrably incorrect for locales that use
224characters above that range (when mapped into Unicode). It will also
225tend to run slower. Avoidance of locales is strongly encouraged.
226
227=head1 SEE ALSO
228
229L<byte>, L<utf8>, L<perlvar/"$^U">
230
231=cut