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