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