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