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