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