This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlre.pod: slight rewording
[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
376d9008 9Unicode support is an extensive requirement. While Perl does not
c349b1b9
JH
10implement the Unicode standard or the accompanying technical reports
11from cover to cover, Perl does support many Unicode features.
21bad921 12
2575c402 13People who want to learn to use Unicode in Perl, should probably read
9d1c51c1 14the L<Perl Unicode tutorial, perlunitut|perlunitut>, before reading
e4911a48 15this reference document.
2575c402 16
9d1c51c1
KW
17Also, the use of Unicode may present security issues that aren't obvious.
18Read L<Unicode Security Considerations|http://www.unicode.org/reports/tr36>.
19
13a2d996 20=over 4
21bad921 21
fae2c0fb 22=item Input and Output Layers
21bad921 23
376d9008 24Perl knows when a filehandle uses Perl's internal Unicode encodings
1bfb14c4
JH
25(UTF-8, or UTF-EBCDIC if in EBCDIC) if the filehandle is opened with
26the ":utf8" layer. Other encodings can be converted to Perl's
27encoding on input or from Perl's encoding on output by use of the
28":encoding(...)" layer. See L<open>.
c349b1b9 29
2575c402 30To indicate that Perl source itself is in UTF-8, use C<use utf8;>.
21bad921
GS
31
32=item Regular Expressions
33
c349b1b9 34The regular expression compiler produces polymorphic opcodes. That is,
376d9008 35the pattern adapts to the data and automatically switches to the Unicode
2575c402 36character scheme when presented with data that is internally encoded in
ac036724 37UTF-8, or instead uses a traditional byte scheme when presented with
2575c402 38byte data.
21bad921 39
ad0029c4 40=item C<use utf8> still needed to enable UTF-8/UTF-EBCDIC in scripts
21bad921 41
376d9008
JB
42As a compatibility measure, the C<use utf8> pragma must be explicitly
43included to enable recognition of UTF-8 in the Perl scripts themselves
1bfb14c4
JH
44(in string or regular expression literals, or in identifier names) on
45ASCII-based machines or to recognize UTF-EBCDIC on EBCDIC-based
376d9008 46machines. B<These are the only times when an explicit C<use utf8>
8f8cf39c 47is needed.> See L<utf8>.
21bad921 48
7aa207d6
JH
49=item BOM-marked scripts and UTF-16 scripts autodetected
50
51If a Perl script begins marked with the Unicode BOM (UTF-16LE, UTF16-BE,
52or UTF-8), or if the script looks like non-BOM-marked UTF-16 of either
53endianness, Perl will correctly read in the script as Unicode.
54(BOMless UTF-8 cannot be effectively recognized or differentiated from
55ISO 8859-1 or other eight-bit encodings.)
56
990e18f7
AT
57=item C<use encoding> needed to upgrade non-Latin-1 byte strings
58
38a44b82 59By default, there is a fundamental asymmetry in Perl's Unicode model:
990e18f7
AT
60implicit upgrading from byte strings to Unicode strings assumes that
61they were encoded in I<ISO 8859-1 (Latin-1)>, but Unicode strings are
62downgraded with UTF-8 encoding. This happens because the first 256
51f494cc 63codepoints in Unicode happens to agree with Latin-1.
990e18f7 64
990e18f7
AT
65See L</"Byte and Character Semantics"> for more details.
66
21bad921
GS
67=back
68
376d9008 69=head2 Byte and Character Semantics
393fec97 70
376d9008 71Beginning with version 5.6, Perl uses logically-wide characters to
3e4dbfed 72represent strings internally.
393fec97 73
376d9008
JB
74In future, Perl-level operations will be expected to work with
75characters rather than bytes.
393fec97 76
376d9008 77However, as an interim compatibility measure, Perl aims to
75daf61c
JH
78provide a safe migration path from byte semantics to character
79semantics for programs. For operations where Perl can unambiguously
376d9008 80decide that the input data are characters, Perl switches to
75daf61c
JH
81character semantics. For operations where this determination cannot
82be made without additional information from the user, Perl decides in
376d9008 83favor of compatibility and chooses to use byte semantics.
8cbd9a7a 84
51f494cc 85Under byte semantics, when C<use locale> is in effect, Perl uses the
e1b711da
KW
86semantics associated with the current locale. Absent a C<use locale>, and
87absent a C<use feature 'unicode_strings'> pragma, Perl currently uses US-ASCII
88(or Basic Latin in Unicode terminology) byte semantics, meaning that characters
89whose ordinal numbers are in the range 128 - 255 are undefined except for their
90ordinal numbers. This means that none have case (upper and lower), nor are any
91a member of character classes, like C<[:alpha:]> or C<\w>. (But all do belong
92to the C<\W> class or the Perl regular expression extension C<[:^alpha:]>.)
2bbc8d55 93
8cbd9a7a 94This behavior preserves compatibility with earlier versions of Perl,
376d9008 95which allowed byte semantics in Perl operations only if
e1b711da 96none of the program's inputs were marked as being a source of Unicode
8cbd9a7a
GS
97character data. Such data may come from filehandles, from calls to
98external programs, from information provided by the system (such as %ENV),
21bad921 99or from literals and constants in the source text.
8cbd9a7a 100
376d9008
JB
101The C<bytes> pragma will always, regardless of platform, force byte
102semantics in a particular lexical scope. See L<bytes>.
8cbd9a7a 103
e1b711da 104The C<use feature 'unicode_strings'> pragma is intended to always, regardless
9d1c51c1
KW
105of platform, force character (Unicode) semantics in a particular lexical scope.
106In release 5.12, it is partially implemented, applying only to case changes.
e1b711da
KW
107See L</The "Unicode Bug"> below.
108
8cbd9a7a 109The C<utf8> pragma is primarily a compatibility device that enables
75daf61c 110recognition of UTF-(8|EBCDIC) in literals encountered by the parser.
376d9008
JB
111Note that this pragma is only required while Perl defaults to byte
112semantics; when character semantics become the default, this pragma
113may become a no-op. See L<utf8>.
114
115Unless explicitly stated, Perl operators use character semantics
116for Unicode data and byte semantics for non-Unicode data.
117The decision to use character semantics is made transparently. If
118input data comes from a Unicode source--for example, if a character
fae2c0fb 119encoding layer is added to a filehandle or a literal Unicode
376d9008
JB
120string constant appears in a program--character semantics apply.
121Otherwise, byte semantics are in effect. The C<bytes> pragma should
e1b711da
KW
122be used to force byte semantics on Unicode data, and the C<use feature
123'unicode_strings'> pragma to force Unicode semantics on byte data (though in
1245.12 it isn't fully implemented).
376d9008
JB
125
126If strings operating under byte semantics and strings with Unicode
51f494cc 127character data are concatenated, the new string will have
d9b01026
KW
128character semantics. This can cause surprises: See L</BUGS>, below.
129You can choose to be warned when this happens. See L<encoding::warnings>.
7dedd01f 130
feda178f 131Under character semantics, many operations that formerly operated on
376d9008 132bytes now operate on characters. A character in Perl is
feda178f 133logically just a number ranging from 0 to 2**31 or so. Larger
376d9008
JB
134characters may encode into longer sequences of bytes internally, but
135this internal detail is mostly hidden for Perl code.
136See L<perluniintro> for more.
393fec97 137
376d9008 138=head2 Effects of Character Semantics
393fec97
GS
139
140Character semantics have the following effects:
141
142=over 4
143
144=item *
145
376d9008 146Strings--including hash keys--and regular expression patterns may
574c8022 147contain characters that have an ordinal value larger than 255.
393fec97 148
2575c402
JW
149If you use a Unicode editor to edit your program, Unicode characters may
150occur directly within the literal strings in UTF-8 encoding, or UTF-16.
151(The former requires a BOM or C<use utf8>, the latter requires a BOM.)
3e4dbfed 152
195e542a
KW
153Unicode characters can also be added to a string by using the C<\N{U+...}>
154notation. The Unicode code for the desired character, in hexadecimal,
155should be placed in the braces, after the C<U>. For instance, a smiley face is
6f335b04
KW
156C<\N{U+263A}>.
157
195e542a
KW
158Alternatively, you can use the C<\x{...}> notation for characters 0x100 and
159above. For characters below 0x100 you may get byte semantics instead of
6f335b04 160character semantics; see L</The "Unicode Bug">. On EBCDIC machines there is
195e542a 161the additional problem that the value for such characters gives the EBCDIC
6f335b04 162character rather than the Unicode one.
3e4dbfed
JF
163
164Additionally, if you
574c8022 165
3e4dbfed 166 use charnames ':full';
574c8022 167
1bfb14c4
JH
168you can use the C<\N{...}> notation and put the official Unicode
169character name within the braces, such as C<\N{WHITE SMILING FACE}>.
6f335b04 170See L<charnames>.
376d9008 171
393fec97
GS
172=item *
173
574c8022
JH
174If an appropriate L<encoding> is specified, identifiers within the
175Perl script may contain Unicode alphanumeric characters, including
376d9008
JB
176ideographs. Perl does not currently attempt to canonicalize variable
177names.
393fec97 178
393fec97
GS
179=item *
180
1bfb14c4 181Regular expressions match characters instead of bytes. "." matches
2575c402 182a character instead of a byte.
393fec97 183
393fec97
GS
184=item *
185
9d1c51c1 186Bracketed character classes in regular expressions match characters instead of
376d9008 187bytes and match against the character properties specified in the
1bfb14c4 188Unicode properties database. C<\w> can be used to match a Japanese
75daf61c 189ideograph, for instance.
393fec97 190
393fec97
GS
191=item *
192
9d1c51c1
KW
193Named Unicode properties, scripts, and block ranges may be used (like bracketed
194character classes) by using the C<\p{}> "matches property" construct and
822502e5 195the C<\P{}> negation, "doesn't match property".
2575c402 196See L</"Unicode Character Properties"> for more details.
822502e5
TS
197
198You can define your own character properties and use them
199in the regular expression with the C<\p{}> or C<\P{}> construct.
822502e5
TS
200See L</"User-Defined Character Properties"> for more details.
201
202=item *
203
9f815e24
KW
204The special pattern C<\X> matches a logical character, an "extended grapheme
205cluster" in Standardese. In Unicode what appears to the user to be a single
51f494cc
KW
206character, for example an accented C<G>, may in fact be composed of a sequence
207of characters, in this case a C<G> followed by an accent character. C<\X>
208will match the entire sequence.
822502e5
TS
209
210=item *
211
212The C<tr///> operator translates characters instead of bytes. Note
213that the C<tr///CU> functionality has been removed. For similar
214functionality see pack('U0', ...) and pack('C0', ...).
215
216=item *
217
218Case translation operators use the Unicode case translation tables
219when character input is provided. Note that C<uc()>, or C<\U> in
220interpolated strings, translates to uppercase, while C<ucfirst>,
221or C<\u> in interpolated strings, translates to titlecase in languages
e1b711da
KW
222that make the distinction (which is equivalent to uppercase in languages
223without the distinction).
822502e5
TS
224
225=item *
226
227Most operators that deal with positions or lengths in a string will
228automatically switch to using character positions, including
229C<chop()>, C<chomp()>, C<substr()>, C<pos()>, C<index()>, C<rindex()>,
230C<sprintf()>, C<write()>, and C<length()>. An operator that
51f494cc
KW
231specifically does not switch is C<vec()>. Operators that really don't
232care include operators that treat strings as a bucket of bits such as
822502e5
TS
233C<sort()>, and operators dealing with filenames.
234
235=item *
236
51f494cc 237The C<pack()>/C<unpack()> letter C<C> does I<not> change, since it is often
822502e5
TS
238used for byte-oriented formats. Again, think C<char> in the C language.
239
240There is a new C<U> specifier that converts between Unicode characters
241and code points. There is also a C<W> specifier that is the equivalent of
242C<chr>/C<ord> and properly handles character values even if they are above 255.
243
244=item *
245
246The C<chr()> and C<ord()> functions work on characters, similar to
247C<pack("W")> and C<unpack("W")>, I<not> C<pack("C")> and
248C<unpack("C")>. C<pack("C")> and C<unpack("C")> are methods for
249emulating byte-oriented C<chr()> and C<ord()> on Unicode strings.
250While these methods reveal the internal encoding of Unicode strings,
251that is not something one normally needs to care about at all.
252
253=item *
254
255The bit string operators, C<& | ^ ~>, can operate on character data.
256However, for backward compatibility, such as when using bit string
257operations when characters are all less than 256 in ordinal value, one
258should not use C<~> (the bit complement) with characters of both
259values less than 256 and values greater than 256. Most importantly,
260DeMorgan's laws (C<~($x|$y) eq ~$x&~$y> and C<~($x&$y) eq ~$x|~$y>)
261will not hold. The reason for this mathematical I<faux pas> is that
262the complement cannot return B<both> the 8-bit (byte-wide) bit
263complement B<and> the full character-wide bit complement.
264
265=item *
266
9d1c51c1
KW
267You can define your own mappings to be used in C<lc()>,
268C<lcfirst()>, C<uc()>, and C<ucfirst()> (or their double-quoted string inlined
ab296a20
FR
269versions such as C<\U>). See
270L<User-Defined Case-Mappings|/"User-Defined Case Mappings (for serious hackers only)">
271for more details.
822502e5
TS
272
273=back
274
275=over 4
276
277=item *
278
279And finally, C<scalar reverse()> reverses by character rather than by byte.
280
281=back
282
283=head2 Unicode Character Properties
284
51f494cc 285Most Unicode character properties are accessible by using regular expressions.
9d1c51c1
KW
286They are used (like bracketed character classes) by using the C<\p{}> "matches
287property" construct and the C<\P{}> negation, "doesn't match property".
288
289Note that the only time that Perl considers a sequence of individual code
290points as a single logical character is in the C<\X> construct, already
291mentioned above. Therefore "character" in this discussion means a single
292Unicode code point.
51f494cc 293
9d1c51c1 294For instance, C<\p{Uppercase}> matches any single character with the Unicode
51f494cc
KW
295"Uppercase" property, while C<\p{L}> matches any character with a
296General_Category of "L" (letter) property. Brackets are not
9d1c51c1 297required for single letter property names, so C<\p{L}> is equivalent to C<\pL>.
51f494cc 298
9d1c51c1
KW
299More formally, C<\p{Uppercase}> matches any single character whose Unicode
300Uppercase property value is True, and C<\P{Uppercase}> matches any character
301whose Uppercase property value is False, and they could have been written as
302C<\p{Uppercase=True}> and C<\p{Uppercase=False}>, respectively.
51f494cc
KW
303
304This formality is needed when properties are not binary, that is if they can
305take on more values than just True and False. For example, the Bidi_Class (see
306L</"Bidirectional Character Types"> below), can take on a number of different
307values, such as Left, Right, Whitespace, and others. To match these, one needs
e1b711da 308to specify the property name (Bidi_Class), and the value being matched against
9d1c51c1 309(Left, Right, etc.). This is done, as in the examples above, by having the
9f815e24 310two components separated by an equal sign (or interchangeably, a colon), like
51f494cc
KW
311C<\p{Bidi_Class: Left}>.
312
313All Unicode-defined character properties may be written in these compound forms
314of C<\p{property=value}> or C<\p{property:value}>, but Perl provides some
315additional properties that are written only in the single form, as well as
316single-form short-cuts for all binary properties and certain others described
317below, in which you may omit the property name and the equals or colon
318separator.
319
320Most Unicode character properties have at least two synonyms (or aliases if you
321prefer), a short one that is easier to type, and a longer one which is more
322descriptive and hence it is easier to understand what it means. Thus the "L"
323and "Letter" above are equivalent and can be used interchangeably. Likewise,
324"Upper" is a synonym for "Uppercase", and we could have written
325C<\p{Uppercase}> equivalently as C<\p{Upper}>. Also, there are typically
326various synonyms for the values the property can be. For binary properties,
327"True" has 3 synonyms: "T", "Yes", and "Y"; and "False has correspondingly "F",
328"No", and "N". But be careful. A short form of a value for one property may
e1b711da 329not mean the same thing as the same short form for another. Thus, for the
51f494cc
KW
330General_Category property, "L" means "Letter", but for the Bidi_Class property,
331"L" means "Left". A complete list of properties and synonyms is in
332L<perluniprops>.
333
334Upper/lower case differences in the property names and values are irrelevant,
335thus C<\p{Upper}> means the same thing as C<\p{upper}> or even C<\p{UpPeR}>.
336Similarly, you can add or subtract underscores anywhere in the middle of a
337word, so that these are also equivalent to C<\p{U_p_p_e_r}>. And white space
338is irrelevant adjacent to non-word characters, such as the braces and the equals
339or colon separators so C<\p{ Upper }> and C<\p{ Upper_case : Y }> are
340equivalent to these as well. In fact, in most cases, white space and even
341hyphens can be added or deleted anywhere. So even C<\p{ Up-per case = Yes}> is
342equivalent. All this is called "loose-matching" by Unicode. The few places
343where stricter matching is employed is in the middle of numbers, and the Perl
344extension properties that begin or end with an underscore. Stricter matching
345cares about white space (except adjacent to the non-word characters) and
346hyphens, and non-interior underscores.
4193bef7 347
376d9008
JB
348You can also use negation in both C<\p{}> and C<\P{}> by introducing a caret
349(^) between the first brace and the property name: C<\p{^Tamil}> is
eb0cc9e3 350equal to C<\P{Tamil}>.
4193bef7 351
51f494cc 352=head3 B<General_Category>
14bb0a9a 353
51f494cc
KW
354Every Unicode character is assigned a general category, which is the "most
355usual categorization of a character" (from
356L<http://www.unicode.org/reports/tr44>).
822502e5 357
9f815e24 358The compound way of writing these is like C<\p{General_Category=Number}>
51f494cc
KW
359(short, C<\p{gc:n}>). But Perl furnishes shortcuts in which everything up
360through the equal or colon separator is omitted. So you can instead just write
361C<\pN>.
822502e5 362
51f494cc 363Here are the short and long forms of the General Category properties:
393fec97 364
d73e5302
JH
365 Short Long
366
367 L Letter
51f494cc
KW
368 LC, L& Cased_Letter (that is: [\p{Ll}\p{Lu}\p{Lt}])
369 Lu Uppercase_Letter
370 Ll Lowercase_Letter
371 Lt Titlecase_Letter
372 Lm Modifier_Letter
373 Lo Other_Letter
d73e5302
JH
374
375 M Mark
51f494cc
KW
376 Mn Nonspacing_Mark
377 Mc Spacing_Mark
378 Me Enclosing_Mark
d73e5302
JH
379
380 N Number
51f494cc
KW
381 Nd Decimal_Number (also Digit)
382 Nl Letter_Number
383 No Other_Number
384
385 P Punctuation (also Punct)
386 Pc Connector_Punctuation
387 Pd Dash_Punctuation
388 Ps Open_Punctuation
389 Pe Close_Punctuation
390 Pi Initial_Punctuation
d73e5302 391 (may behave like Ps or Pe depending on usage)
51f494cc 392 Pf Final_Punctuation
d73e5302 393 (may behave like Ps or Pe depending on usage)
51f494cc 394 Po Other_Punctuation
d73e5302
JH
395
396 S Symbol
51f494cc
KW
397 Sm Math_Symbol
398 Sc Currency_Symbol
399 Sk Modifier_Symbol
400 So Other_Symbol
d73e5302
JH
401
402 Z Separator
51f494cc
KW
403 Zs Space_Separator
404 Zl Line_Separator
405 Zp Paragraph_Separator
d73e5302
JH
406
407 C Other
d88362ca 408 Cc Control (also Cntrl)
e150c829 409 Cf Format
eb0cc9e3 410 Cs Surrogate (not usable)
51f494cc 411 Co Private_Use
e150c829 412 Cn Unassigned
1ac13f9a 413
376d9008 414Single-letter properties match all characters in any of the
3e4dbfed 415two-letter sub-properties starting with the same letter.
9d1c51c1 416C<LC> and C<L&> are special cases, which are both aliases for the set consisting of everything matched by C<Ll>, C<Lu>, and C<Lt>.
32293815 417
eb0cc9e3 418Because Perl hides the need for the user to understand the internal
1bfb14c4
JH
419representation of Unicode characters, there is no need to implement
420the somewhat messy concept of surrogates. C<Cs> is therefore not
eb0cc9e3 421supported.
d73e5302 422
51f494cc 423=head3 B<Bidirectional Character Types>
822502e5 424
9d1c51c1
KW
425Because scripts differ in their directionality (Hebrew is
426written right to left, for example) Unicode supplies these properties in
51f494cc 427the Bidi_Class class:
32293815 428
eb0cc9e3 429 Property Meaning
92e830a9 430
12ac2576
JP
431 L Left-to-Right
432 LRE Left-to-Right Embedding
433 LRO Left-to-Right Override
434 R Right-to-Left
51f494cc 435 AL Arabic Letter
12ac2576
JP
436 RLE Right-to-Left Embedding
437 RLO Right-to-Left Override
438 PDF Pop Directional Format
439 EN European Number
51f494cc
KW
440 ES European Separator
441 ET European Terminator
12ac2576 442 AN Arabic Number
51f494cc 443 CS Common Separator
12ac2576
JP
444 NSM Non-Spacing Mark
445 BN Boundary Neutral
446 B Paragraph Separator
447 S Segment Separator
448 WS Whitespace
449 ON Other Neutrals
450
51f494cc
KW
451This property is always written in the compound form.
452For example, C<\p{Bidi_Class:R}> matches characters that are normally
eb0cc9e3
JH
453written right to left.
454
51f494cc
KW
455=head3 B<Scripts>
456
e1b711da
KW
457The world's languages are written in a number of scripts. This sentence
458(unless you're reading it in translation) is written in Latin, while Russian is
459written in Cyrllic, and Greek is written in, well, Greek; Japanese mainly in
460Hiragana or Katakana. There are many more.
51f494cc
KW
461
462The Unicode Script property gives what script a given character is in,
9d1c51c1
KW
463and the property can be specified with the compound form like
464C<\p{Script=Hebrew}> (short: C<\p{sc=hebr}>). Perl furnishes shortcuts for all
465script names. You can omit everything up through the equals (or colon), and
466simply write C<\p{Latin}> or C<\P{Cyrillic}>.
51f494cc
KW
467
468A complete list of scripts and their shortcuts is in L<perluniprops>.
469
51f494cc 470=head3 B<Use of "Is" Prefix>
822502e5 471
1bfb14c4 472For backward compatibility (with Perl 5.6), all properties mentioned
51f494cc
KW
473so far may have C<Is> or C<Is_> prepended to their name, so C<\P{Is_Lu}>, for
474example, is equal to C<\P{Lu}>, and C<\p{IsScript:Arabic}> is equal to
475C<\p{Arabic}>.
eb0cc9e3 476
51f494cc 477=head3 B<Blocks>
2796c109 478
1bfb14c4
JH
479In addition to B<scripts>, Unicode also defines B<blocks> of
480characters. The difference between scripts and blocks is that the
481concept of scripts is closer to natural languages, while the concept
51f494cc 482of blocks is more of an artificial grouping based on groups of Unicode
9f815e24 483characters with consecutive ordinal values. For example, the "Basic Latin"
51f494cc 484block is all characters whose ordinals are between 0 and 127, inclusive, in
9f815e24
KW
485other words, the ASCII characters. The "Latin" script contains some letters
486from this block as well as several more, like "Latin-1 Supplement",
9d1c51c1 487"Latin Extended-A", etc., but it does not contain all the characters from
51f494cc
KW
488those blocks. It does not, for example, contain digits, because digits are
489shared across many scripts. Digits and similar groups, like punctuation, are in
490the script called C<Common>. There is also a script called C<Inherited> for
491characters that modify other characters, and inherit the script value of the
492controlling character.
493
494For more about scripts versus blocks, see UAX#24 "Unicode Script Property":
495L<http://www.unicode.org/reports/tr24>
496
497The Script property is likely to be the one you want to use when processing
498natural language; the Block property may be useful in working with the nuts and
499bolts of Unicode.
500
501Block names are matched in the compound form, like C<\p{Block: Arrows}> or
502C<\p{Blk=Hebrew}>. Unlike most other properties only a few block names have a
503Unicode-defined short name. But Perl does provide a (slight) shortcut: You
504can say, for example C<\p{In_Arrows}> or C<\p{In_Hebrew}>. For backwards
505compatibility, the C<In> prefix may be omitted if there is no naming conflict
506with a script or any other property, and you can even use an C<Is> prefix
507instead in those cases. But it is not a good idea to do this, for a couple
508reasons:
509
510=over 4
511
512=item 1
513
514It is confusing. There are many naming conflicts, and you may forget some.
9f815e24 515For example, C<\p{Hebrew}> means the I<script> Hebrew, and NOT the I<block>
51f494cc
KW
516Hebrew. But would you remember that 6 months from now?
517
518=item 2
519
520It is unstable. A new version of Unicode may pre-empt the current meaning by
521creating a property with the same name. There was a time in very early Unicode
9f815e24 522releases when C<\p{Hebrew}> would have matched the I<block> Hebrew; now it
51f494cc 523doesn't.
32293815 524
393fec97
GS
525=back
526
51f494cc
KW
527Some people just prefer to always use C<\p{Block: foo}> and C<\p{Script: bar}>
528instead of the shortcuts, for clarity, and because they can't remember the
529difference between 'In' and 'Is' anyway (or aren't confident that those who
530eventually will read their code will know).
531
532A complete list of blocks and their shortcuts is in L<perluniprops>.
533
9f815e24
KW
534=head3 B<Other Properties>
535
536There are many more properties than the very basic ones described here.
537A complete list is in L<perluniprops>.
538
539Unicode defines all its properties in the compound form, so all single-form
540properties are Perl extensions. A number of these are just synonyms for the
541Unicode ones, but some are genunine extensions, including a couple that are in
542the compound form. And quite a few of these are actually recommended by Unicode
543(in L<http://www.unicode.org/reports/tr18>).
544
545This section gives some details on all the extensions that aren't synonyms for
546compound-form Unicode properties (for those, you'll have to refer to the
547L<Unicode Standard|http://www.unicode.org/reports/tr44>.
548
549=over
550
551=item B<C<\p{All}>>
552
553This matches any of the 1_114_112 Unicode code points. It is a synonym for
554C<\p{Any}>.
555
556=item B<C<\p{Alnum}>>
557
558This matches any C<\p{Alphabetic}> or C<\p{Decimal_Number}> character.
559
560=item B<C<\p{Any}>>
561
562This matches any of the 1_114_112 Unicode code points. It is a synonym for
563C<\p{All}>.
564
565=item B<C<\p{Assigned}>>
566
567This matches any assigned code point; that is, any code point whose general
568category is not Unassigned (or equivalently, not Cn).
569
570=item B<C<\p{Blank}>>
571
572This is the same as C<\h> and C<\p{HorizSpace}>: A character that changes the
573spacing horizontally.
574
575=item B<C<\p{Decomposition_Type: Non_Canonical}>> (Short: C<\p{Dt=NonCanon}>)
576
577Matches a character that has a non-canonical decomposition.
578
579To understand the use of this rarely used property=value combination, it is
580necessary to know some basics about decomposition.
581Consider a character, say H. It could appear with various marks around it,
582such as an acute accent, or a circumflex, or various hooks, circles, arrows,
9d1c51c1 583I<etc.>, above, below, to one side and/or the other, etc. There are many
9f815e24
KW
584possibilities among the world's languages. The number of combinations is
585astronomical, and if there were a character for each combination, it would
586soon exhaust Unicode's more than a million possible characters. So Unicode
587took a different approach: there is a character for the base H, and a
588character for each of the possible marks, and they can be combined variously
589to get a final logical character. So a logical character--what appears to be a
590single character--can be a sequence of more than one individual characters.
591This is called an "extended grapheme cluster". (Perl furnishes the C<\X>
592construct to match such sequences.)
593
594But Unicode's intent is to unify the existing character set standards and
595practices, and a number of pre-existing standards have single characters that
596mean the same thing as some of these combinations. An example is ISO-8859-1,
597which has quite a few of these in the Latin-1 range, an example being "LATIN
598CAPITAL LETTER E WITH ACUTE". Because this character was in this pre-existing
599standard, Unicode added it to its repertoire. But this character is considered
600by Unicode to be equivalent to the sequence consisting of first the character
601"LATIN CAPITAL LETTER E", then the character "COMBINING ACUTE ACCENT".
602
603"LATIN CAPITAL LETTER E WITH ACUTE" is called a "pre-composed" character, and
604the equivalence with the sequence is called canonical equivalence. All
605pre-composed characters are said to have a decomposition (into the equivalent
606sequence) and the decomposition type is also called canonical.
607
608However, many more characters have a different type of decomposition, a
609"compatible" or "non-canonical" decomposition. The sequences that form these
610decompositions are not considered canonically equivalent to the pre-composed
611character. An example, again in the Latin-1 range, is the "SUPERSCRIPT ONE".
612It is kind of like a regular digit 1, but not exactly; its decomposition
613into the digit 1 is called a "compatible" decomposition, specifically a
614"super" decomposition. There are several such compatibility
615decompositions (see L<http://www.unicode.org/reports/tr44>), including one
616called "compat" which means some miscellaneous type of decomposition
617that doesn't fit into the decomposition categories that Unicode has chosen.
618
619Note that most Unicode characters don't have a decomposition, so their
620decomposition type is "None".
621
622Perl has added the C<Non_Canonical> type, for your convenience, to mean any of
623the compatibility decompositions.
624
625=item B<C<\p{Graph}>>
626
627Matches any character that is graphic. Theoretically, this means a character
628that on a printer would cause ink to be used.
629
630=item B<C<\p{HorizSpace}>>
631
632This is the same as C<\h> and C<\p{Blank}>: A character that changes the
633spacing horizontally.
634
635=item B<C<\p{In=*}>>
636
637This is a synonym for C<\p{Present_In=*}>
638
639=item B<C<\p{PerlSpace}>>
640
641This is the same as C<\s>, restricted to ASCII, namely C<S<[ \f\n\r\t]>>.
642
643Mnemonic: Perl's (original) space
644
645=item B<C<\p{PerlWord}>>
646
647This is the same as C<\w>, restricted to ASCII, namely C<[A-Za-z0-9_]>
648
649Mnemonic: Perl's (original) word.
650
651=item B<C<\p{PosixAlnum}>>
652
653This matches any alphanumeric character in the ASCII range, namely
654C<[A-Za-z0-9]>.
655
656=item B<C<\p{PosixAlpha}>>
657
658This matches any alphabetic character in the ASCII range, namely C<[A-Za-z]>.
659
660=item B<C<\p{PosixBlank}>>
661
662This matches any blank character in the ASCII range, namely C<S<[ \t]>>.
663
664=item B<C<\p{PosixCntrl}>>
665
666This matches any control character in the ASCII range, namely C<[\x00-\x1F\x7F]>
667
668=item B<C<\p{PosixDigit}>>
669
670This matches any digit character in the ASCII range, namely C<[0-9]>.
671
672=item B<C<\p{PosixGraph}>>
673
674This matches any graphical character in the ASCII range, namely C<[\x21-\x7E]>.
675
676=item B<C<\p{PosixLower}>>
677
678This matches any lowercase character in the ASCII range, namely C<[a-z]>.
679
680=item B<C<\p{PosixPrint}>>
681
682This matches any printable character in the ASCII range, namely C<[\x20-\x7E]>.
683These are the graphical characters plus SPACE.
684
685=item B<C<\p{PosixPunct}>>
686
687This matches any punctuation character in the ASCII range, namely
688C<[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]>. These are the
689graphical characters that aren't word characters. Note that the Posix standard
690includes in its definition of punctuation, those characters that Unicode calls
691"symbols."
692
693=item B<C<\p{PosixSpace}>>
694
695This matches any space character in the ASCII range, namely
696C<S<[ \f\n\r\t\x0B]>> (the last being a vertical tab).
697
698=item B<C<\p{PosixUpper}>>
699
700This matches any uppercase character in the ASCII range, namely C<[A-Z]>.
701
702=item B<C<\p{Present_In: *}>> (Short: C<\p{In=*}>)
703
704This property is used when you need to know in what Unicode version(s) a
705character is.
706
707The "*" above stands for some two digit Unicode version number, such as
708C<1.1> or C<4.0>; or the "*" can also be C<Unassigned>. This property will
709match the code points whose final disposition has been settled as of the
710Unicode release given by the version number; C<\p{Present_In: Unassigned}>
711will match those code points whose meaning has yet to be assigned.
712
713For example, C<U+0041> "LATIN CAPITAL LETTER A" was present in the very first
714Unicode release available, which is C<1.1>, so this property is true for all
715valid "*" versions. On the other hand, C<U+1EFF> was not assigned until version
7165.1 when it became "LATIN SMALL LETTER Y WITH LOOP", so the only "*" that
717would match it are 5.1, 5.2, and later.
718
719Unicode furnishes the C<Age> property from which this is derived. The problem
720with Age is that a strict interpretation of it (which Perl takes) has it
721matching the precise release a code point's meaning is introduced in. Thus
722C<U+0041> would match only 1.1; and C<U+1EFF> only 5.1. This is not usually what
723you want.
724
725Some non-Perl implementations of the Age property may change its meaning to be
726the same as the Perl Present_In property; just be aware of that.
727
728Another confusion with both these properties is that the definition is not
729that the code point has been assigned, but that the meaning of the code point
730has been determined. This is because 66 code points will always be
731unassigned, and, so the Age for them is the Unicode version the decision to
732make them so was made in. For example, C<U+FDD0> is to be permanently
733unassigned to a character, and the decision to do that was made in version 3.1,
734so C<\p{Age=3.1}> matches this character and C<\p{Present_In: 3.1}> and up
735matches as well.
736
737=item B<C<\p{Print}>>
738
ae5b72c8 739This matches any character that is graphical or blank, except controls.
9f815e24
KW
740
741=item B<C<\p{SpacePerl}>>
742
743This is the same as C<\s>, including beyond ASCII.
744
4d4acfba
KW
745Mnemonic: Space, as modified by Perl. (It doesn't include the vertical tab
746which both the Posix standard and Unicode consider to be space.)
9f815e24
KW
747
748=item B<C<\p{VertSpace}>>
749
750This is the same as C<\v>: A character that changes the spacing vertically.
751
752=item B<C<\p{Word}>>
753
754This is the same as C<\w>, including beyond ASCII.
755
756=back
757
376d9008 758=head2 User-Defined Character Properties
491fd90a 759
51f494cc
KW
760You can define your own binary character properties by defining subroutines
761whose names begin with "In" or "Is". The subroutines can be defined in any
762package. The user-defined properties can be used in the regular expression
763C<\p> and C<\P> constructs; if you are using a user-defined property from a
764package other than the one you are in, you must specify its package in the
765C<\p> or C<\P> construct.
bac0b425 766
51f494cc 767 # assuming property Is_Foreign defined in Lang::
bac0b425
JP
768 package main; # property package name required
769 if ($txt =~ /\p{Lang::IsForeign}+/) { ... }
770
771 package Lang; # property package name not required
772 if ($txt =~ /\p{IsForeign}+/) { ... }
773
774
775Note that the effect is compile-time and immutable once defined.
491fd90a 776
376d9008
JB
777The subroutines must return a specially-formatted string, with one
778or more newline-separated lines. Each line must be one of the following:
491fd90a
JH
779
780=over 4
781
782=item *
783
510254c9
A
784A single hexadecimal number denoting a Unicode code point to include.
785
786=item *
787
99a6b1f0 788Two hexadecimal numbers separated by horizontal whitespace (space or
376d9008 789tabular characters) denoting a range of Unicode code points to include.
491fd90a
JH
790
791=item *
792
376d9008 793Something to include, prefixed by "+": a built-in character
bac0b425
JP
794property (prefixed by "utf8::") or a user-defined character property,
795to represent all the characters in that property; two hexadecimal code
796points for a range; or a single hexadecimal code point.
491fd90a
JH
797
798=item *
799
376d9008 800Something to exclude, prefixed by "-": an existing character
bac0b425
JP
801property (prefixed by "utf8::") or a user-defined character property,
802to represent all the characters in that property; two hexadecimal code
803points for a range; or a single hexadecimal code point.
491fd90a
JH
804
805=item *
806
376d9008 807Something to negate, prefixed "!": an existing character
bac0b425
JP
808property (prefixed by "utf8::") or a user-defined character property,
809to represent all the characters in that property; two hexadecimal code
810points for a range; or a single hexadecimal code point.
811
812=item *
813
814Something to intersect with, prefixed by "&": an existing character
815property (prefixed by "utf8::") or a user-defined character property,
816for all the characters except the characters in the property; two
817hexadecimal code points for a range; or a single hexadecimal code point.
491fd90a
JH
818
819=back
820
821For example, to define a property that covers both the Japanese
822syllabaries (hiragana and katakana), you can define
823
824 sub InKana {
d88362ca 825 return <<END;
d5822f25
A
826 3040\t309F
827 30A0\t30FF
491fd90a
JH
828 END
829 }
830
d5822f25
A
831Imagine that the here-doc end marker is at the beginning of the line.
832Now you can use C<\p{InKana}> and C<\P{InKana}>.
491fd90a
JH
833
834You could also have used the existing block property names:
835
836 sub InKana {
d88362ca 837 return <<'END';
491fd90a
JH
838 +utf8::InHiragana
839 +utf8::InKatakana
840 END
841 }
842
843Suppose you wanted to match only the allocated characters,
d5822f25 844not the raw block ranges: in other words, you want to remove
491fd90a
JH
845the non-characters:
846
847 sub InKana {
d88362ca 848 return <<'END';
491fd90a
JH
849 +utf8::InHiragana
850 +utf8::InKatakana
851 -utf8::IsCn
852 END
853 }
854
855The negation is useful for defining (surprise!) negated classes.
856
857 sub InNotKana {
d88362ca 858 return <<'END';
491fd90a
JH
859 !utf8::InHiragana
860 -utf8::InKatakana
861 +utf8::IsCn
862 END
863 }
864
bac0b425
JP
865Intersection is useful for getting the common characters matched by
866two (or more) classes.
867
868 sub InFooAndBar {
869 return <<'END';
870 +main::Foo
871 &main::Bar
872 END
873 }
874
ac036724 875It's important to remember not to use "&" for the first set; that
bac0b425
JP
876would be intersecting with nothing (resulting in an empty set).
877
68585b5e 878=head2 User-Defined Case Mappings (for serious hackers only)
822502e5 879
d5cd9e7b
KW
880You can also define your own mappings to be used in C<lc()>,
881C<lcfirst()>, C<uc()>, and C<ucfirst()> (or their string-inlined versions,
68585b5e
KW
882C<\L>, C<\l>, C<\U>, and C<\u>). The mappings are currently only valid
883on strings encoded in UTF-8, but see below for a partial workaround for
884this restriction.
885
822502e5 886The principle is similar to that of user-defined character
68585b5e
KW
887properties: define subroutines that do the mappings.
888C<ToLower> is used for C<lc()>, C<\L>, C<lcfirst()>, and C<\l>; C<ToTitle> for
889C<ucfirst()> and C<\u>; and C<ToUpper> for C<uc()> and C<\U>.
3a2263fe 890
68585b5e 891C<ToUpper()> should look something like this:
3a2263fe
RGS
892
893 sub ToUpper {
d88362ca 894 return <<END;
68585b5e
KW
895 0061\t007A\t0041
896 0101\t\t0100
3a2263fe
RGS
897 END
898 }
899
68585b5e
KW
900This sample C<ToUpper()> has the effect of mapping "a-z" to "A-Z", 0x101
901to 0x100, and all other characters map to themselves. The first
902returned line means to map the code point at 0x61 ("a") to 0x41 ("A"),
903the code point at 0x62 ("b") to 0x42 ("B"), ..., 0x7A ("z") to 0x5A
904("Z"). The second line maps just the code point 0x101 to 0x100. Since
905there are no other mappings defined, all other code points map to
906themselves.
907
908This mechanism is not well behaved as far as affecting other packages
909and scopes. All non-threaded programs have exactly one uppercasing
910behavior, one lowercasing behavior, and one titlecasing behavior in
911effect for utf8-encoded strings for the duration of the program. Each
912of these behaviors is irrevocably determined the first time the
913corresponding function is called to change a utf8-encoded string's case.
914If a corresponding C<To-> function has been defined in the package that
915makes that first call, the mapping defined by that function will be the
916mapping used for the duration of the program's execution across all
917packages and scopes. If no corresponding C<To-> function has been
918defined in that package, the standard official mapping will be used for
919all packages and scopes, and any corresponding C<To-> function anywhere
920will be ignored. Threaded programs have similar behavior. If the
921program's casing behavior has been decided at the time of a thread's
922creation, the thread will inherit that behavior. But, if the behavior
923hasn't been decided, the thread gets to decide for itself, and its
924decision does not affect other threads nor its creator.
925
926As shown by the example above, you have to furnish a complete mapping;
927you can't just override a couple of characters and leave the rest
71648f9a 928unchanged. You can find all the official mappings in the directory
d5cd9e7b
KW
929C<$Config{privlib}>F</unicore/To/>. The mapping data is returned as the
930here-document. The C<utf8::ToSpecI<Foo>> hashes in those files are special
931exception mappings derived from
71648f9a 932C<$Config{privlib}>F</unicore/SpecialCasing.txt>. (The "Digit" and
9f815e24 933"Fold" mappings that one can see in the directory are not directly
d5cd9e7b 934user-accessible, one can use either the L<Unicode::UCD> module, or just match
71648f9a
KW
935case-insensitively, which is what uses the "Fold" mapping. Neither are user
936overridable.)
3a2263fe 937
71648f9a
KW
938If you have many mappings to change, you can take the official mapping data,
939change by hand the affected code points, and place the whole thing into your
940subroutine. But this will only be valid on Perls that use the same Unicode
941version. Another option would be to have your subroutine read the official
942mapping file(s) and overwrite the affected code points.
3a2263fe 943
70a5eb4a
KW
944If you have only a few mappings to change you can use the
945following trick (but see below for a big caveat), here illustrated for
946Turkish:
71648f9a
KW
947
948 use Config;
70a5eb4a 949 use charnames ":full";
71648f9a
KW
950
951 sub ToUpper {
952 my $official = do "$Config{privlib}/unicore/To/Upper.pl";
70a5eb4a 953 $utf8::ToSpecUpper{'i'} =
71648f9a
KW
954 "\N{LATIN CAPITAL LETTER I WITH DOT ABOVE}";
955 return $official;
956 }
957
958This takes the official mappings and overrides just one, for "LATIN SMALL
70a5eb4a
KW
959LETTER I". Each hash key must be the string of bytes that form the UTF-8
960(on EBCDIC platforms, UTF-EBCDIC) of the character, as illustrated by
961the inverse function.
71648f9a
KW
962
963 sub ToLower {
964 my $official = do $lower;
965 $utf8::ToSpecLower{"\xc4\xb0"} = "i";
966 return $official;
967 }
968
70a5eb4a
KW
969This example is for an ASCII platform, and C<\xc4\xb0> is the string of
970bytes that together form the UTF-8 that represents C<\N{LATIN CAPITAL
971LETTER I WITH DOT ABOVE}>, C<U+0130>. You can avoid having to figure out
972these bytes, and at the same time make it work on all platforms by
973instead writing:
71648f9a 974
70a5eb4a
KW
975 sub ToLower {
976 my $official = do $lower;
977 my $sequence = "\N{LATIN CAPITAL LETTER I WITH DOT ABOVE}";
978 utf8::encode($sequence);
979 $utf8::ToSpecLower{$sequence} = "i";
980 return $official;
71648f9a
KW
981 }
982
70a5eb4a
KW
983This works because C<utf8::encode()> takes the single character and
984converts it to the sequence of bytes that constitute it. Note that we took
985advantage of the fact that C<"i"> is the same in UTF-8 or UTF_EBCIDIC as not;
986otherwise we would have had to write
987
988 $utf8::ToSpecLower{$sequence} = "\N{LATIN SMALL LETTER I}";
989
990in the ToLower example, and in the ToUpper example, use
991
992 my $sequence = "\N{LATIN SMALL LETTER I}";
993 utf8::encode($sequence);
994
68585b5e
KW
995A big caveat to the above trick, and to this whole mechanism in general,
996is that they work only on strings encoded in UTF-8. You can partially
997get around this by using C<use subs>. For example:
70a5eb4a
KW
998
999 use subs qw(uc ucfirst lc lcfirst);
1000
1001 sub uc($) {
1002 my $string = shift;
1003 utf8::upgrade($string);
1004 return CORE::uc($string);
1005 }
1006
1007 sub lc($) {
1008 my $string = shift;
1009 utf8::upgrade($string);
1010
1011 # Unless an I is before a dot_above, it turns into a dotless i.
1012 # (The character class with the combining classes matches non-above
1013 # marks following the I. Any number of these may be between the 'I' and
68585b5e 1014 # the dot_above, and the dot_above will still apply to the 'I'.
70a5eb4a
KW
1015 use charnames ":full";
1016 $string =~
1017 s/I
1018 (?! [^\p{ccc=0}\p{ccc=Above}]* \N{COMBINING DOT ABOVE} )
1019 /\N{LATIN SMALL LETTER DOTLESS I}/gx;
1020
1021 # But when the I is followed by a dot_above, remove the
1022 # dot_above so the end result will be i.
1023 $string =~ s/I
1024 ([^\p{ccc=0}\p{ccc=Above}]* )
1025 \N{COMBINING DOT ABOVE}
1026 /i$1/gx;
1027 return CORE::lc($string);
1028 }
71648f9a
KW
1029
1030These examples (also for Turkish) make sure the input is in UTF-8, and then
1031call the corresponding official function, which will use the C<ToUpper()> and
68585b5e 1032C<ToLower()> functions you have defined.
70a5eb4a
KW
1033(For Turkish, there are other required functions: C<ucfirst>, C<lcfirst>,
1034and C<ToTitle>. These are very similar to the ones given above.)
1035
1036The reason this is a partial work-around is that it doesn't affect the C<\l>,
1037C<\L>, C<\u>, and C<\U> case change operations, which still require the source
1038to be encoded in utf8 (see L</The "Unicode Bug">).
1039
1040The C<lc()> example shows how you can add context-dependent casing. Note
1041that context-dependent casing suffers from the problem that the string
1042passed to the casing function may not have sufficient context to make
68585b5e 1043the proper choice. And, it will not be called for C<\l>, C<\L>, C<\u>,
70a5eb4a 1044and C<\U>.
3a2263fe 1045
376d9008 1046=head2 Character Encodings for Input and Output
8cbd9a7a 1047
7221edc9 1048See L<Encode>.
8cbd9a7a 1049
c29a771d 1050=head2 Unicode Regular Expression Support Level
776f8809 1051
376d9008
JB
1052The following list of Unicode support for regular expressions describes
1053all the features currently supported. The references to "Level N"
8158862b
TS
1054and the section numbers refer to the Unicode Technical Standard #18,
1055"Unicode Regular Expressions", version 11, in May 2005.
776f8809
JH
1056
1057=over 4
1058
1059=item *
1060
1061Level 1 - Basic Unicode Support
1062
d88362ca
KW
1063 RL1.1 Hex Notation - done [1]
1064 RL1.2 Properties - done [2][3]
1065 RL1.2a Compatibility Properties - done [4]
1066 RL1.3 Subtraction and Intersection - MISSING [5]
1067 RL1.4 Simple Word Boundaries - done [6]
1068 RL1.5 Simple Loose Matches - done [7]
1069 RL1.6 Line Boundaries - MISSING [8]
1070 RL1.7 Supplementary Code Points - done [9]
8158862b
TS
1071
1072 [1] \x{...}
1073 [2] \p{...} \P{...}
d88362ca
KW
1074 [3] supports not only minimal list, but all Unicode character
1075 properties (see L</Unicode Character Properties>)
8158862b
TS
1076 [4] \d \D \s \S \w \W \X [:prop:] [:^prop:]
1077 [5] can use regular expression look-ahead [a] or
d88362ca
KW
1078 user-defined character properties [b] to emulate set
1079 operations
8158862b 1080 [6] \b \B
d88362ca
KW
1081 [7] note that Perl does Full case-folding in matching (but with
1082 bugs), not Simple: for example U+1F88 is equivalent to
1083 U+1F00 U+03B9, not with 1F80. This difference matters
1084 mainly for certain Greek capital letters with certain
1085 modifiers: the Full case-folding decomposes the letter,
1086 while the Simple case-folding would map it to a single
1087 character.
1088 [8] should do ^ and $ also on U+000B (\v in C), FF (\f), CR
1089 (\r), CRLF (\r\n), NEL (U+0085), LS (U+2028), and PS
1090 (U+2029); should also affect <>, $., and script line
1091 numbers; should not split lines within CRLF [c] (i.e. there
1092 is no empty line between \r and \n)
1093 [9] UTF-8/UTF-EBDDIC used in perl allows not only U+10000 to
1094 U+10FFFF but also beyond U+10FFFF [d]
7207e29d 1095
237bad5b 1096[a] You can mimic class subtraction using lookahead.
8158862b 1097For example, what UTS#18 might write as
29bdacb8 1098
dbe420b4
JH
1099 [{Greek}-[{UNASSIGNED}]]
1100
1101in Perl can be written as:
1102
1d81abf3
JH
1103 (?!\p{Unassigned})\p{InGreekAndCoptic}
1104 (?=\p{Assigned})\p{InGreekAndCoptic}
dbe420b4
JH
1105
1106But in this particular example, you probably really want
1107
1bfb14c4 1108 \p{GreekAndCoptic}
dbe420b4
JH
1109
1110which will match assigned characters known to be part of the Greek script.
29bdacb8 1111
5ca1ac52 1112Also see the Unicode::Regex::Set module, it does implement the full
8158862b
TS
1113UTS#18 grouping, intersection, union, and removal (subtraction) syntax.
1114
1115[b] '+' for union, '-' for removal (set-difference), '&' for intersection
1116(see L</"User-Defined Character Properties">)
1117
1118[c] Try the C<:crlf> layer (see L<PerlIO>).
5ca1ac52 1119
c670e63a
KW
1120[d] U+FFFF will currently generate a warning message if 'utf8' warnings are
1121 enabled
237bad5b 1122
776f8809
JH
1123=item *
1124
1125Level 2 - Extended Unicode Support
1126
8158862b 1127 RL2.1 Canonical Equivalents - MISSING [10][11]
c670e63a 1128 RL2.2 Default Grapheme Clusters - MISSING [12]
8158862b
TS
1129 RL2.3 Default Word Boundaries - MISSING [14]
1130 RL2.4 Default Loose Matches - MISSING [15]
1131 RL2.5 Name Properties - MISSING [16]
1132 RL2.6 Wildcard Properties - MISSING
1133
1134 [10] see UAX#15 "Unicode Normalization Forms"
1135 [11] have Unicode::Normalize but not integrated to regexes
e1b711da 1136 [12] have \X but we don't have a "Grapheme Cluster Mode"
8158862b
TS
1137 [14] see UAX#29, Word Boundaries
1138 [15] see UAX#21 "Case Mappings"
5bd59e57 1139 [16] missing loose match [e]
8158862b
TS
1140
1141[e] C<\N{...}> allows namespaces (see L<charnames>).
776f8809
JH
1142
1143=item *
1144
8158862b
TS
1145Level 3 - Tailored Support
1146
1147 RL3.1 Tailored Punctuation - MISSING
1148 RL3.2 Tailored Grapheme Clusters - MISSING [17][18]
1149 RL3.3 Tailored Word Boundaries - MISSING
1150 RL3.4 Tailored Loose Matches - MISSING
1151 RL3.5 Tailored Ranges - MISSING
1152 RL3.6 Context Matching - MISSING [19]
1153 RL3.7 Incremental Matches - MISSING
1154 ( RL3.8 Unicode Set Sharing )
1155 RL3.9 Possible Match Sets - MISSING
1156 RL3.10 Folded Matching - MISSING [20]
1157 RL3.11 Submatchers - MISSING
1158
1159 [17] see UAX#10 "Unicode Collation Algorithms"
1160 [18] have Unicode::Collate but not integrated to regexes
d88362ca
KW
1161 [19] have (?<=x) and (?=x), but look-aheads or look-behinds
1162 should see outside of the target substring
1163 [20] need insensitive matching for linguistic features other
1164 than case; for example, hiragana to katakana, wide and
1165 narrow, simplified Han to traditional Han (see UTR#30
1166 "Character Foldings")
776f8809
JH
1167
1168=back
1169
c349b1b9
JH
1170=head2 Unicode Encodings
1171
376d9008
JB
1172Unicode characters are assigned to I<code points>, which are abstract
1173numbers. To use these numbers, various encodings are needed.
c349b1b9
JH
1174
1175=over 4
1176
c29a771d 1177=item *
5cb3728c
RB
1178
1179UTF-8
c349b1b9 1180
3e4dbfed 1181UTF-8 is a variable-length (1 to 6 bytes, current character allocations
376d9008
JB
1182require 4 bytes), byte-order independent encoding. For ASCII (and we
1183really do mean 7-bit ASCII, not another 8-bit encoding), UTF-8 is
1184transparent.
c349b1b9 1185
8c007b5a 1186The following table is from Unicode 3.2.
05632f9a 1187
d88362ca 1188 Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
05632f9a 1189
d88362ca 1190 U+0000..U+007F 00..7F
e1b711da 1191 U+0080..U+07FF * C2..DF 80..BF
d88362ca 1192 U+0800..U+0FFF E0 * A0..BF 80..BF
ec90690f
TS
1193 U+1000..U+CFFF E1..EC 80..BF 80..BF
1194 U+D000..U+D7FF ED 80..9F 80..BF
e1b711da 1195 U+D800..U+DFFF +++++++ utf16 surrogates, not legal utf8 +++++++
ec90690f 1196 U+E000..U+FFFF EE..EF 80..BF 80..BF
d88362ca
KW
1197 U+10000..U+3FFFF F0 * 90..BF 80..BF 80..BF
1198 U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
1199 U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
e1b711da
KW
1200
1201Note the gaps before several of the byte entries above marked by '*'. These are
1202caused by legal UTF-8 avoiding non-shortest encodings: it is technically
1203possible to UTF-8-encode a single code point in different ways, but that is
1204explicitly forbidden, and the shortest possible encoding should always be used
1205(and that is what Perl does).
37361303 1206
376d9008 1207Another way to look at it is via bits:
05632f9a
JH
1208
1209 Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
1210
1211 0aaaaaaa 0aaaaaaa
1212 00000bbbbbaaaaaa 110bbbbb 10aaaaaa
1213 ccccbbbbbbaaaaaa 1110cccc 10bbbbbb 10aaaaaa
1214 00000dddccccccbbbbbbaaaaaa 11110ddd 10cccccc 10bbbbbb 10aaaaaa
1215
9f815e24 1216As you can see, the continuation bytes all begin with "10", and the
e1b711da 1217leading bits of the start byte tell how many bytes there are in the
05632f9a
JH
1218encoded character.
1219
c29a771d 1220=item *
5cb3728c
RB
1221
1222UTF-EBCDIC
dbe420b4 1223
376d9008 1224Like UTF-8 but EBCDIC-safe, in the way that UTF-8 is ASCII-safe.
dbe420b4 1225
c29a771d 1226=item *
5cb3728c 1227
1e54db1a 1228UTF-16, UTF-16BE, UTF-16LE, Surrogates, and BOMs (Byte Order Marks)
c349b1b9 1229
1bfb14c4
JH
1230The followings items are mostly for reference and general Unicode
1231knowledge, Perl doesn't use these constructs internally.
dbe420b4 1232
c349b1b9 1233UTF-16 is a 2 or 4 byte encoding. The Unicode code points
1bfb14c4
JH
1234C<U+0000..U+FFFF> are stored in a single 16-bit unit, and the code
1235points C<U+10000..U+10FFFF> in two 16-bit units. The latter case is
c349b1b9
JH
1236using I<surrogates>, the first 16-bit unit being the I<high
1237surrogate>, and the second being the I<low surrogate>.
1238
376d9008 1239Surrogates are code points set aside to encode the C<U+10000..U+10FFFF>
c349b1b9 1240range of Unicode code points in pairs of 16-bit units. The I<high
9f815e24 1241surrogates> are the range C<U+D800..U+DBFF> and the I<low surrogates>
376d9008 1242are the range C<U+DC00..U+DFFF>. The surrogate encoding is
c349b1b9 1243
d88362ca
KW
1244 $hi = ($uni - 0x10000) / 0x400 + 0xD800;
1245 $lo = ($uni - 0x10000) % 0x400 + 0xDC00;
c349b1b9
JH
1246
1247and the decoding is
1248
d88362ca 1249 $uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);
c349b1b9 1250
feda178f 1251If you try to generate surrogates (for example by using chr()), you
e1b711da 1252will get a warning, if warnings are turned on, because those code
376d9008 1253points are not valid for a Unicode character.
9466bab6 1254
376d9008 1255Because of the 16-bitness, UTF-16 is byte-order dependent. UTF-16
c349b1b9 1256itself can be used for in-memory computations, but if storage or
376d9008
JB
1257transfer is required either UTF-16BE (big-endian) or UTF-16LE
1258(little-endian) encodings must be chosen.
c349b1b9
JH
1259
1260This introduces another problem: what if you just know that your data
376d9008
JB
1261is UTF-16, but you don't know which endianness? Byte Order Marks, or
1262BOMs, are a solution to this. A special character has been reserved
86bbd6d1 1263in Unicode to function as a byte order marker: the character with the
376d9008 1264code point C<U+FEFF> is the BOM.
042da322 1265
c349b1b9 1266The trick is that if you read a BOM, you will know the byte order,
376d9008
JB
1267since if it was written on a big-endian platform, you will read the
1268bytes C<0xFE 0xFF>, but if it was written on a little-endian platform,
1269you will read the bytes C<0xFF 0xFE>. (And if the originating platform
1270was writing in UTF-8, you will read the bytes C<0xEF 0xBB 0xBF>.)
042da322 1271
86bbd6d1 1272The way this trick works is that the character with the code point
376d9008
JB
1273C<U+FFFE> is guaranteed not to be a valid Unicode character, so the
1274sequence of bytes C<0xFF 0xFE> is unambiguously "BOM, represented in
1bfb14c4 1275little-endian format" and cannot be C<U+FFFE>, represented in big-endian
e1b711da
KW
1276format". (Actually, C<U+FFFE> is legal for use by your program, even for
1277input/output, but better not use it if you need a BOM. But it is "illegal for
1278interchange", so that an unsuspecting program won't get confused.)
c349b1b9 1279
c29a771d 1280=item *
5cb3728c 1281
1e54db1a 1282UTF-32, UTF-32BE, UTF-32LE
c349b1b9
JH
1283
1284The UTF-32 family is pretty much like the UTF-16 family, expect that
042da322 1285the units are 32-bit, and therefore the surrogate scheme is not
376d9008
JB
1286needed. The BOM signatures will be C<0x00 0x00 0xFE 0xFF> for BE and
1287C<0xFF 0xFE 0x00 0x00> for LE.
c349b1b9 1288
c29a771d 1289=item *
5cb3728c
RB
1290
1291UCS-2, UCS-4
c349b1b9 1292
86bbd6d1 1293Encodings defined by the ISO 10646 standard. UCS-2 is a 16-bit
376d9008 1294encoding. Unlike UTF-16, UCS-2 is not extensible beyond C<U+FFFF>,
339cfa0e
JH
1295because it does not use surrogates. UCS-4 is a 32-bit encoding,
1296functionally identical to UTF-32.
c349b1b9 1297
c29a771d 1298=item *
5cb3728c
RB
1299
1300UTF-7
c349b1b9 1301
376d9008
JB
1302A seven-bit safe (non-eight-bit) encoding, which is useful if the
1303transport or storage is not eight-bit safe. Defined by RFC 2152.
c349b1b9 1304
95a1a48b
JH
1305=back
1306
0d7c09bb
JH
1307=head2 Security Implications of Unicode
1308
e1b711da
KW
1309Read L<Unicode Security Considerations|http://www.unicode.org/reports/tr36>.
1310Also, note the following:
1311
0d7c09bb
JH
1312=over 4
1313
1314=item *
1315
1316Malformed UTF-8
bf0fa0b2
JH
1317
1318Unfortunately, the specification of UTF-8 leaves some room for
1319interpretation of how many bytes of encoded output one should generate
376d9008
JB
1320from one input Unicode character. Strictly speaking, the shortest
1321possible sequence of UTF-8 bytes should be generated,
1322because otherwise there is potential for an input buffer overflow at
feda178f 1323the receiving end of a UTF-8 connection. Perl always generates the
e1b711da 1324shortest length UTF-8, and with warnings on, Perl will warn about
376d9008
JB
1325non-shortest length UTF-8 along with other malformations, such as the
1326surrogates, which are not real Unicode code points.
bf0fa0b2 1327
0d7c09bb
JH
1328=item *
1329
1330Regular expressions behave slightly differently between byte data and
376d9008
JB
1331character (Unicode) data. For example, the "word character" character
1332class C<\w> will work differently depending on if data is eight-bit bytes
1333or Unicode.
0d7c09bb 1334
376d9008
JB
1335In the first case, the set of C<\w> characters is either small--the
1336default set of alphabetic characters, digits, and the "_"--or, if you
0d7c09bb
JH
1337are using a locale (see L<perllocale>), the C<\w> might contain a few
1338more letters according to your language and country.
1339
376d9008 1340In the second case, the C<\w> set of characters is much, much larger.
1bfb14c4
JH
1341Most importantly, even in the set of the first 256 characters, it will
1342probably match different characters: unlike most locales, which are
1343specific to a language and country pair, Unicode classifies all the
1344characters that are letters I<somewhere> as C<\w>. For example, your
1345locale might not think that LATIN SMALL LETTER ETH is a letter (unless
1346you happen to speak Icelandic), but Unicode does.
0d7c09bb 1347
376d9008 1348As discussed elsewhere, Perl has one foot (two hooves?) planted in
1bfb14c4
JH
1349each of two worlds: the old world of bytes and the new world of
1350characters, upgrading from bytes to characters when necessary.
376d9008
JB
1351If your legacy code does not explicitly use Unicode, no automatic
1352switch-over to characters should happen. Characters shouldn't get
1bfb14c4
JH
1353downgraded to bytes, either. It is possible to accidentally mix bytes
1354and characters, however (see L<perluniintro>), in which case C<\w> in
1355regular expressions might start behaving differently. Review your
1356code. Use warnings and the C<strict> pragma.
0d7c09bb
JH
1357
1358=back
1359
c349b1b9
JH
1360=head2 Unicode in Perl on EBCDIC
1361
376d9008
JB
1362The way Unicode is handled on EBCDIC platforms is still
1363experimental. On such platforms, references to UTF-8 encoding in this
1364document and elsewhere should be read as meaning the UTF-EBCDIC
1365specified in Unicode Technical Report 16, unless ASCII vs. EBCDIC issues
c349b1b9 1366are specifically discussed. There is no C<utfebcdic> pragma or
376d9008 1367":utfebcdic" layer; rather, "utf8" and ":utf8" are reused to mean
86bbd6d1
PN
1368the platform's "natural" 8-bit encoding of Unicode. See L<perlebcdic>
1369for more discussion of the issues.
c349b1b9 1370
b310b053
JH
1371=head2 Locales
1372
4616122b 1373Usually locale settings and Unicode do not affect each other, but
b310b053
JH
1374there are a couple of exceptions:
1375
1376=over 4
1377
1378=item *
1379
8aa8f774
JH
1380You can enable automatic UTF-8-ification of your standard file
1381handles, default C<open()> layer, and C<@ARGV> by using either
1382the C<-C> command line switch or the C<PERL_UNICODE> environment
1383variable, see L<perlrun> for the documentation of the C<-C> switch.
b310b053
JH
1384
1385=item *
1386
376d9008
JB
1387Perl tries really hard to work both with Unicode and the old
1388byte-oriented world. Most often this is nice, but sometimes Perl's
1389straddling of the proverbial fence causes problems.
b310b053
JH
1390
1391=back
1392
1aad1664
JH
1393=head2 When Unicode Does Not Happen
1394
1395While Perl does have extensive ways to input and output in Unicode,
1396and few other 'entry points' like the @ARGV which can be interpreted
1397as Unicode (UTF-8), there still are many places where Unicode (in some
1398encoding or another) could be given as arguments or received as
1399results, or both, but it is not.
1400
e1b711da
KW
1401The following are such interfaces. Also, see L</The "Unicode Bug">.
1402For all of these interfaces Perl
6cd4dd6c
JH
1403currently (as of 5.8.3) simply assumes byte strings both as arguments
1404and results, or UTF-8 strings if the C<encoding> pragma has been used.
1aad1664
JH
1405
1406One reason why Perl does not attempt to resolve the role of Unicode in
e1b711da 1407these cases is that the answers are highly dependent on the operating
1aad1664
JH
1408system and the file system(s). For example, whether filenames can be
1409in Unicode, and in exactly what kind of encoding, is not exactly a
1410portable concept. Similarly for the qx and system: how well will the
1411'command line interface' (and which of them?) handle Unicode?
1412
1413=over 4
1414
557a2462
RB
1415=item *
1416
51f494cc 1417chdir, chmod, chown, chroot, exec, link, lstat, mkdir,
1e8e8236 1418rename, rmdir, stat, symlink, truncate, unlink, utime, -X
557a2462
RB
1419
1420=item *
1421
1422%ENV
1423
1424=item *
1425
1426glob (aka the <*>)
1427
1428=item *
1aad1664 1429
557a2462 1430open, opendir, sysopen
1aad1664 1431
557a2462 1432=item *
1aad1664 1433
557a2462 1434qx (aka the backtick operator), system
1aad1664 1435
557a2462 1436=item *
1aad1664 1437
557a2462 1438readdir, readlink
1aad1664
JH
1439
1440=back
1441
e1b711da
KW
1442=head2 The "Unicode Bug"
1443
1444The term, the "Unicode bug" has been applied to an inconsistency with the
6f335b04 1445Unicode characters whose ordinals are in the Latin-1 Supplement block, that
e1b711da
KW
1446is, between 128 and 255. Without a locale specified, unlike all other
1447characters or code points, these characters have very different semantics in
1448byte semantics versus character semantics.
1449
1450In character semantics they are interpreted as Unicode code points, which means
1451they have the same semantics as Latin-1 (ISO-8859-1).
1452
1453In byte semantics, they are considered to be unassigned characters, meaning
1454that the only semantics they have is their ordinal numbers, and that they are
1455not members of various character classes. None are considered to match C<\w>
1456for example, but all match C<\W>. (On EBCDIC platforms, the behavior may
1457be different from this, depending on the underlying C language library
1458functions.)
1459
1460The behavior is known to have effects on these areas:
1461
1462=over 4
1463
1464=item *
1465
1466Changing the case of a scalar, that is, using C<uc()>, C<ucfirst()>, C<lc()>,
1467and C<lcfirst()>, or C<\L>, C<\U>, C<\u> and C<\l> in regular expression
1468substitutions.
1469
1470=item *
1471
1472Using caseless (C</i>) regular expression matching
1473
1474=item *
1475
630d17dc
KW
1476Matching a number of properties in regular expressions, namely C<\b>,
1477C<\B>, C<\s>, C<\S>, C<\w>, C<\W>, and all the Posix character classes
1478I<except> C<[[:ascii:]]>.
e1b711da
KW
1479
1480=item *
1481
1482User-defined case change mappings. You can create a C<ToUpper()> function, for
1483example, which overrides Perl's built-in case mappings. The scalar must be
1484encoded in utf8 for your function to actually be invoked.
1485
1486=back
1487
1488This behavior can lead to unexpected results in which a string's semantics
1489suddenly change if a code point above 255 is appended to or removed from it,
1490which changes the string's semantics from byte to character or vice versa. As
1491an example, consider the following program and its output:
1492
1493 $ perl -le'
1494 $s1 = "\xC2";
1495 $s2 = "\x{2660}";
1496 for ($s1, $s2, $s1.$s2) {
1497 print /\w/ || 0;
1498 }
1499 '
1500 0
1501 0
1502 1
1503
9f815e24 1504If there's no C<\w> in C<s1> or in C<s2>, why does their concatenation have one?
e1b711da
KW
1505
1506This anomaly stems from Perl's attempt to not disturb older programs that
1507didn't use Unicode, and hence had no semantics for characters outside of the
1508ASCII range (except in a locale), along with Perl's desire to add Unicode
1509support seamlessly. The result wasn't seamless: these characters were
1510orphaned.
1511
1512Work is being done to correct this, but only some of it was complete in time
1513for the 5.12 release. What has been finished is the important part of the case
1514changing component. Due to concerns, and some evidence, that older code might
1515have come to rely on the existing behavior, the new behavior must be explicitly
1516enabled by the feature C<unicode_strings> in the L<feature> pragma, even though
1517no new syntax is involved.
1518
1519See L<perlfunc/lc> for details on how this pragma works in combination with
1520various others for casing. Even though the pragma only affects casing
1521operations in the 5.12 release, it is planned to have it affect all the
1522problematic behaviors in later releases: you can't have one without them all.
1523
1524In the meantime, a workaround is to always call utf8::upgrade($string), or to
6f335b04
KW
1525use the standard module L<Encode>. Also, a scalar that has any characters
1526whose ordinal is above 0x100, or which were specified using either of the
1527C<\N{...}> notations will automatically have character semantics.
e1b711da 1528
1aad1664
JH
1529=head2 Forcing Unicode in Perl (Or Unforcing Unicode in Perl)
1530
e1b711da
KW
1531Sometimes (see L</"When Unicode Does Not Happen"> or L</The "Unicode Bug">)
1532there are situations where you simply need to force a byte
2bbc8d55
SP
1533string into UTF-8, or vice versa. The low-level calls
1534utf8::upgrade($bytestring) and utf8::downgrade($utf8string[, FAIL_OK]) are
1aad1664
JH
1535the answers.
1536
2bbc8d55
SP
1537Note that utf8::downgrade() can fail if the string contains characters
1538that don't fit into a byte.
1aad1664 1539
e1b711da
KW
1540Calling either function on a string that already is in the desired state is a
1541no-op.
1542
95a1a48b
JH
1543=head2 Using Unicode in XS
1544
3a2263fe
RGS
1545If you want to handle Perl Unicode in XS extensions, you may find the
1546following C APIs useful. See also L<perlguts/"Unicode Support"> for an
1547explanation about Unicode at the XS level, and L<perlapi> for the API
1548details.
95a1a48b
JH
1549
1550=over 4
1551
1552=item *
1553
1bfb14c4 1554C<DO_UTF8(sv)> returns true if the C<UTF8> flag is on and the bytes
2bbc8d55 1555pragma is not in effect. C<SvUTF8(sv)> returns true if the C<UTF8>
1bfb14c4
JH
1556flag is on; the bytes pragma is ignored. The C<UTF8> flag being on
1557does B<not> mean that there are any characters of code points greater
1558than 255 (or 127) in the scalar or that there are even any characters
1559in the scalar. What the C<UTF8> flag means is that the sequence of
1560octets in the representation of the scalar is the sequence of UTF-8
1561encoded code points of the characters of a string. The C<UTF8> flag
1562being off means that each octet in this representation encodes a
1563single character with code point 0..255 within the string. Perl's
1564Unicode model is not to use UTF-8 until it is absolutely necessary.
95a1a48b
JH
1565
1566=item *
1567
2bbc8d55 1568C<uvchr_to_utf8(buf, chr)> writes a Unicode character code point into
1bfb14c4 1569a buffer encoding the code point as UTF-8, and returns a pointer
2bbc8d55 1570pointing after the UTF-8 bytes. It works appropriately on EBCDIC machines.
95a1a48b
JH
1571
1572=item *
1573
2bbc8d55 1574C<utf8_to_uvchr(buf, lenp)> reads UTF-8 encoded bytes from a buffer and
376d9008 1575returns the Unicode character code point and, optionally, the length of
2bbc8d55 1576the UTF-8 byte sequence. It works appropriately on EBCDIC machines.
95a1a48b
JH
1577
1578=item *
1579
376d9008
JB
1580C<utf8_length(start, end)> returns the length of the UTF-8 encoded buffer
1581in characters. C<sv_len_utf8(sv)> returns the length of the UTF-8 encoded
95a1a48b
JH
1582scalar.
1583
1584=item *
1585
376d9008
JB
1586C<sv_utf8_upgrade(sv)> converts the string of the scalar to its UTF-8
1587encoded form. C<sv_utf8_downgrade(sv)> does the opposite, if
1588possible. C<sv_utf8_encode(sv)> is like sv_utf8_upgrade except that
1589it does not set the C<UTF8> flag. C<sv_utf8_decode()> does the
1590opposite of C<sv_utf8_encode()>. Note that none of these are to be
1591used as general-purpose encoding or decoding interfaces: C<use Encode>
1592for that. C<sv_utf8_upgrade()> is affected by the encoding pragma
1593but C<sv_utf8_downgrade()> is not (since the encoding pragma is
1594designed to be a one-way street).
95a1a48b
JH
1595
1596=item *
1597
376d9008 1598C<is_utf8_char(s)> returns true if the pointer points to a valid UTF-8
90f968e0 1599character.
95a1a48b
JH
1600
1601=item *
1602
376d9008 1603C<is_utf8_string(buf, len)> returns true if C<len> bytes of the buffer
95a1a48b
JH
1604are valid UTF-8.
1605
1606=item *
1607
376d9008
JB
1608C<UTF8SKIP(buf)> will return the number of bytes in the UTF-8 encoded
1609character in the buffer. C<UNISKIP(chr)> will return the number of bytes
1610required to UTF-8-encode the Unicode character code point. C<UTF8SKIP()>
90f968e0 1611is useful for example for iterating over the characters of a UTF-8
376d9008 1612encoded buffer; C<UNISKIP()> is useful, for example, in computing
90f968e0 1613the size required for a UTF-8 encoded buffer.
95a1a48b
JH
1614
1615=item *
1616
376d9008 1617C<utf8_distance(a, b)> will tell the distance in characters between the
95a1a48b
JH
1618two pointers pointing to the same UTF-8 encoded buffer.
1619
1620=item *
1621
2bbc8d55 1622C<utf8_hop(s, off)> will return a pointer to a UTF-8 encoded buffer
376d9008
JB
1623that is C<off> (positive or negative) Unicode characters displaced
1624from the UTF-8 buffer C<s>. Be careful not to overstep the buffer:
1625C<utf8_hop()> will merrily run off the end or the beginning of the
1626buffer if told to do so.
95a1a48b 1627
d2cc3551
JH
1628=item *
1629
376d9008
JB
1630C<pv_uni_display(dsv, spv, len, pvlim, flags)> and
1631C<sv_uni_display(dsv, ssv, pvlim, flags)> are useful for debugging the
1632output of Unicode strings and scalars. By default they are useful
1633only for debugging--they display B<all> characters as hexadecimal code
1bfb14c4
JH
1634points--but with the flags C<UNI_DISPLAY_ISPRINT>,
1635C<UNI_DISPLAY_BACKSLASH>, and C<UNI_DISPLAY_QQ> you can make the
1636output more readable.
d2cc3551
JH
1637
1638=item *
1639
2bbc8d55 1640C<ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2)> can be used to
376d9008
JB
1641compare two strings case-insensitively in Unicode. For case-sensitive
1642comparisons you can just use C<memEQ()> and C<memNE()> as usual.
d2cc3551 1643
c349b1b9
JH
1644=back
1645
95a1a48b
JH
1646For more information, see L<perlapi>, and F<utf8.c> and F<utf8.h>
1647in the Perl source code distribution.
1648
e1b711da
KW
1649=head2 Hacking Perl to work on earlier Unicode versions (for very serious hackers only)
1650
1651Perl by default comes with the latest supported Unicode version built in, but
1652you can change to use any earlier one.
1653
1654Download the files in the version of Unicode that you want from the Unicode web
1655site L<http://www.unicode.org>). These should replace the existing files in
1656C<\$Config{privlib}>/F<unicore>. (C<\%Config> is available from the Config
1657module.) Follow the instructions in F<README.perl> in that directory to change
1658some of their names, and then run F<make>.
1659
1660It is even possible to download them to a different directory, and then change
1661F<utf8_heavy.pl> in the directory C<\$Config{privlib}> to point to the new
1662directory, or maybe make a copy of that directory before making the change, and
1663using C<@INC> or the C<-I> run-time flag to switch between versions at will
1664(but because of caching, not in the middle of a process), but all this is
1665beyond the scope of these instructions.
1666
c29a771d
JH
1667=head1 BUGS
1668
376d9008 1669=head2 Interaction with Locales
7eabb34d 1670
376d9008
JB
1671Use of locales with Unicode data may lead to odd results. Currently,
1672Perl attempts to attach 8-bit locale info to characters in the range
16730..255, but this technique is demonstrably incorrect for locales that
1674use characters above that range when mapped into Unicode. Perl's
1675Unicode support will also tend to run slower. Use of locales with
1676Unicode is discouraged.
c29a771d 1677
9f815e24 1678=head2 Problems with characters in the Latin-1 Supplement range
2bbc8d55 1679
e1b711da
KW
1680See L</The "Unicode Bug">
1681
1682=head2 Problems with case-insensitive regular expression matching
1683
1684There are problems with case-insensitive matches, including those involving
1685character classes (enclosed in [square brackets]), characters whose fold
9f815e24
KW
1686is to multiple characters (such as the single character LATIN SMALL LIGATURE
1687FFL matches case-insensitively with the 3-character string C<ffl>), and
1688characters in the Latin-1 Supplement.
2bbc8d55 1689
376d9008 1690=head2 Interaction with Extensions
7eabb34d 1691
376d9008 1692When Perl exchanges data with an extension, the extension should be
2575c402 1693able to understand the UTF8 flag and act accordingly. If the
376d9008
JB
1694extension doesn't know about the flag, it's likely that the extension
1695will return incorrectly-flagged data.
7eabb34d
A
1696
1697So if you're working with Unicode data, consult the documentation of
1698every module you're using if there are any issues with Unicode data
1699exchange. If the documentation does not talk about Unicode at all,
a73d23f6 1700suspect the worst and probably look at the source to learn how the
376d9008 1701module is implemented. Modules written completely in Perl shouldn't
a73d23f6
RGS
1702cause problems. Modules that directly or indirectly access code written
1703in other programming languages are at risk.
7eabb34d 1704
376d9008 1705For affected functions, the simple strategy to avoid data corruption is
7eabb34d 1706to always make the encoding of the exchanged data explicit. Choose an
376d9008 1707encoding that you know the extension can handle. Convert arguments passed
7eabb34d
A
1708to the extensions to that encoding and convert results back from that
1709encoding. Write wrapper functions that do the conversions for you, so
1710you can later change the functions when the extension catches up.
1711
376d9008 1712To provide an example, let's say the popular Foo::Bar::escape_html
7eabb34d
A
1713function doesn't deal with Unicode data yet. The wrapper function
1714would convert the argument to raw UTF-8 and convert the result back to
376d9008 1715Perl's internal representation like so:
7eabb34d
A
1716
1717 sub my_escape_html ($) {
d88362ca
KW
1718 my($what) = shift;
1719 return unless defined $what;
1720 Encode::decode_utf8(Foo::Bar::escape_html(
1721 Encode::encode_utf8($what)));
7eabb34d
A
1722 }
1723
1724Sometimes, when the extension does not convert data but just stores
1725and retrieves them, you will be in a position to use the otherwise
1726dangerous Encode::_utf8_on() function. Let's say the popular
66b79f27 1727C<Foo::Bar> extension, written in C, provides a C<param> method that
7eabb34d
A
1728lets you store and retrieve data according to these prototypes:
1729
1730 $self->param($name, $value); # set a scalar
1731 $value = $self->param($name); # retrieve a scalar
1732
1733If it does not yet provide support for any encoding, one could write a
1734derived class with such a C<param> method:
1735
1736 sub param {
1737 my($self,$name,$value) = @_;
1738 utf8::upgrade($name); # make sure it is UTF-8 encoded
af55fc6a 1739 if (defined $value) {
7eabb34d
A
1740 utf8::upgrade($value); # make sure it is UTF-8 encoded
1741 return $self->SUPER::param($name,$value);
1742 } else {
1743 my $ret = $self->SUPER::param($name);
1744 Encode::_utf8_on($ret); # we know, it is UTF-8 encoded
1745 return $ret;
1746 }
1747 }
1748
a73d23f6
RGS
1749Some extensions provide filters on data entry/exit points, such as
1750DB_File::filter_store_key and family. Look out for such filters in
66b79f27 1751the documentation of your extensions, they can make the transition to
7eabb34d
A
1752Unicode data much easier.
1753
376d9008 1754=head2 Speed
7eabb34d 1755
c29a771d 1756Some functions are slower when working on UTF-8 encoded strings than
574c8022 1757on byte encoded strings. All functions that need to hop over
7c17141f
JH
1758characters such as length(), substr() or index(), or matching regular
1759expressions can work B<much> faster when the underlying data are
1760byte-encoded.
1761
1762In Perl 5.8.0 the slowness was often quite spectacular; in Perl 5.8.1
1763a caching scheme was introduced which will hopefully make the slowness
a104b433
JH
1764somewhat less spectacular, at least for some operations. In general,
1765operations with UTF-8 encoded strings are still slower. As an example,
1766the Unicode properties (character classes) like C<\p{Nd}> are known to
1767be quite a bit slower (5-20 times) than their simpler counterparts
1768like C<\d> (then again, there 268 Unicode characters matching C<Nd>
1769compared with the 10 ASCII characters matching C<d>).
666f95b9 1770
e1b711da
KW
1771=head2 Problems on EBCDIC platforms
1772
1773There are a number of known problems with Perl on EBCDIC platforms. If you
1774want to use Perl there, send email to perlbug@perl.org.
fe749c9a
KW
1775
1776In earlier versions, when byte and character data were concatenated,
1777the new string was sometimes created by
1778decoding the byte strings as I<ISO 8859-1 (Latin-1)>, even if the
1779old Unicode string used EBCDIC.
1780
1781If you find any of these, please report them as bugs.
1782
c8d992ba
A
1783=head2 Porting code from perl-5.6.X
1784
1785Perl 5.8 has a different Unicode model from 5.6. In 5.6 the programmer
1786was required to use the C<utf8> pragma to declare that a given scope
1787expected to deal with Unicode data and had to make sure that only
1788Unicode data were reaching that scope. If you have code that is
1789working with 5.6, you will need some of the following adjustments to
1790your code. The examples are written such that the code will continue
1791to work under 5.6, so you should be safe to try them out.
1792
1793=over 4
1794
1795=item *
1796
1797A filehandle that should read or write UTF-8
1798
1799 if ($] > 5.007) {
740d4bb2 1800 binmode $fh, ":encoding(utf8)";
c8d992ba
A
1801 }
1802
1803=item *
1804
1805A scalar that is going to be passed to some extension
1806
1807Be it Compress::Zlib, Apache::Request or any extension that has no
1808mention of Unicode in the manpage, you need to make sure that the
2575c402 1809UTF8 flag is stripped off. Note that at the time of this writing
c8d992ba
A
1810(October 2002) the mentioned modules are not UTF-8-aware. Please
1811check the documentation to verify if this is still true.
1812
1813 if ($] > 5.007) {
1814 require Encode;
1815 $val = Encode::encode_utf8($val); # make octets
1816 }
1817
1818=item *
1819
1820A scalar we got back from an extension
1821
1822If you believe the scalar comes back as UTF-8, you will most likely
2575c402 1823want the UTF8 flag restored:
c8d992ba
A
1824
1825 if ($] > 5.007) {
1826 require Encode;
1827 $val = Encode::decode_utf8($val);
1828 }
1829
1830=item *
1831
1832Same thing, if you are really sure it is UTF-8
1833
1834 if ($] > 5.007) {
1835 require Encode;
1836 Encode::_utf8_on($val);
1837 }
1838
1839=item *
1840
1841A wrapper for fetchrow_array and fetchrow_hashref
1842
1843When the database contains only UTF-8, a wrapper function or method is
1844a convenient way to replace all your fetchrow_array and
1845fetchrow_hashref calls. A wrapper function will also make it easier to
1846adapt to future enhancements in your database driver. Note that at the
1847time of this writing (October 2002), the DBI has no standardized way
1848to deal with UTF-8 data. Please check the documentation to verify if
1849that is still true.
1850
1851 sub fetchrow {
d88362ca
KW
1852 # $what is one of fetchrow_{array,hashref}
1853 my($self, $sth, $what) = @_;
c8d992ba
A
1854 if ($] < 5.007) {
1855 return $sth->$what;
1856 } else {
1857 require Encode;
1858 if (wantarray) {
1859 my @arr = $sth->$what;
1860 for (@arr) {
1861 defined && /[^\000-\177]/ && Encode::_utf8_on($_);
1862 }
1863 return @arr;
1864 } else {
1865 my $ret = $sth->$what;
1866 if (ref $ret) {
1867 for my $k (keys %$ret) {
d88362ca
KW
1868 defined
1869 && /[^\000-\177]/
1870 && Encode::_utf8_on($_) for $ret->{$k};
c8d992ba
A
1871 }
1872 return $ret;
1873 } else {
1874 defined && /[^\000-\177]/ && Encode::_utf8_on($_) for $ret;
1875 return $ret;
1876 }
1877 }
1878 }
1879 }
1880
1881
1882=item *
1883
1884A large scalar that you know can only contain ASCII
1885
1886Scalars that contain only ASCII and are marked as UTF-8 are sometimes
1887a drag to your program. If you recognize such a situation, just remove
2575c402 1888the UTF8 flag:
c8d992ba
A
1889
1890 utf8::downgrade($val) if $] > 5.007;
1891
1892=back
1893
393fec97
GS
1894=head1 SEE ALSO
1895
51f494cc 1896L<perlunitut>, L<perluniintro>, L<perluniprops>, L<Encode>, L<open>, L<utf8>, L<bytes>,
a05d7ebb 1897L<perlretut>, L<perlvar/"${^UNICODE}">
51f494cc 1898L<http://www.unicode.org/reports/tr44>).
393fec97
GS
1899
1900=cut