Neither is 0xff illegal UTF-EBCDIC since it's the last C1.
[p5sagit/p5-mst-13.2.git] / pod / perlunicode.pod
1 =head1 NAME
2
3 perlunicode - Unicode support in Perl
4
5 =head1 DESCRIPTION
6
7 =head2 Important Caveats
8
9 WARNING: While the implementation of Unicode support in Perl is now
10 fairly complete it is still evolving to some extent.
11
12 In particular the way Unicode is handled on EBCDIC platforms is still
13 rather experimental. On such a platform references to UTF-8 encoding
14 in this document and elsewhere should be read as meaning UTF-EBCDIC as
15 specified in Unicode Technical Report 16 unless ASCII vs EBCDIC issues
16 are specifically discussed. There is no C<utfebcdic> pragma or
17 ":utfebcdic" layer, rather "utf8" and ":utf8" are re-used to mean
18 platform's "natural" 8-bit encoding of Unicode. See L<perlebcdic> for
19 more discussion of the issues.
20
21 The following areas are still under development.
22
23 =over 4
24
25 =item Input and Output Disciplines
26
27 A filehandle can be marked as containing perl's internal Unicode
28 encoding (UTF-8 or UTF-EBCDIC) by opening it with the ":utf8" layer.
29 Other encodings can be converted to perl's encoding on input, or from
30 perl's encoding on output by use of the ":encoding()" layer.  There is
31 not yet a clean way to mark the Perl source itself as being in an
32 particular encoding.
33
34 =item Regular Expressions
35
36 The regular expression compiler does now attempt to produce
37 polymorphic opcodes.  That is the pattern should now adapt to the data
38 and automatically switch to the Unicode character scheme when
39 presented with Unicode data, or a traditional byte scheme when
40 presented with byte data.  The implementation is still new and
41 (particularly on EBCDIC platforms) may need further work.
42
43 =item C<use utf8> still needed to enable UTF-8/UTF-EBCDIC in scripts
44
45 The C<utf8> pragma implements the tables used for Unicode support.
46 These tables are automatically loaded on demand, so the C<utf8> pragma
47 need not normally be used.
48
49 However, as a compatibility measure, this pragma must be explicitly
50 used to enable recognition of UTF-8 in the Perl scripts themselves on
51 ASCII based machines or recognize UTF-EBCDIC on EBCDIC based machines.
52 B<NOTE: this should be the only place where an explicit C<use utf8> is
53 needed>.
54
55 =back
56
57 =head2 Byte and Character semantics
58
59 Beginning with version 5.6, Perl uses logically wide characters to
60 represent strings internally.  This internal representation of strings
61 uses either the UTF-8 or the UTF-EBCDIC encoding.
62
63 In future, Perl-level operations can be expected to work with
64 characters rather than bytes, in general.
65
66 However, as strictly an interim compatibility measure, Perl aims to
67 provide a safe migration path from byte semantics to character
68 semantics for programs.  For operations where Perl can unambiguously
69 decide that the input data is characters, Perl now switches to
70 character semantics.  For operations where this determination cannot
71 be made without additional information from the user, Perl decides in
72 favor of compatibility, and chooses to use byte semantics.
73
74 This behavior preserves compatibility with earlier versions of Perl,
75 which allowed byte semantics in Perl operations, but only as long as
76 none of the program's inputs are marked as being as source of Unicode
77 character data.  Such data may come from filehandles, from calls to
78 external programs, from information provided by the system (such as %ENV),
79 or from literals and constants in the source text.
80
81 If the C<-C> command line switch is used, (or the
82 ${^WIDE_SYSTEM_CALLS} global flag is set to C<1>), all system calls
83 will use the corresponding wide character APIs.  Note that this is
84 currently only implemented on Windows since other platforms API
85 standard on this area.
86
87 Regardless of the above, the C<bytes> pragma can always be used to
88 force byte semantics in a particular lexical scope.  See L<bytes>.
89
90 The C<utf8> pragma is primarily a compatibility device that enables
91 recognition of UTF-(8|EBCDIC) in literals encountered by the parser.
92 Note that this pragma is only required until a future version of Perl
93 in which character semantics will become the default.  This pragma may
94 then become a no-op.  See L<utf8>.
95
96 Unless mentioned otherwise, Perl operators will use character semantics
97 when they are dealing with Unicode data, and byte semantics otherwise.
98 Thus, character semantics for these operations apply transparently; if
99 the input data came from a Unicode source (for example, by adding a
100 character encoding discipline to the filehandle whence it came, or a
101 literal UTF-8 string constant in the program), character semantics
102 apply; otherwise, byte semantics are in effect.  To force byte semantics
103 on Unicode data, the C<bytes> pragma should be used.
104
105 Notice that if you concatenate strings with byte semantics and strings
106 with Unicode character data, the bytes will by default be upgraded
107 I<as if they were ISO 8859-1 (Latin-1)> (or if in EBCDIC, after a
108 translation to ISO 8859-1).  To change this, use the C<encoding>
109 pragma, see L<encoding>.
110
111 Under character semantics, many operations that formerly operated on
112 bytes change to operating on characters.  For ASCII data this makes no
113 difference, because UTF-8 stores ASCII in single bytes, but for any
114 character greater than C<chr(127)>, the character B<may> be stored in
115 a sequence of two or more bytes, all of which have the high bit set.
116
117 For C1 controls or Latin 1 characters on an EBCDIC platform the
118 character may be stored in a UTF-EBCDIC multi byte sequence.  But by
119 and large, the user need not worry about this, because Perl hides it
120 from the user.  A character in Perl is logically just a number ranging
121 from 0 to 2**32 or so.  Larger characters encode to longer sequences
122 of bytes internally, but again, this is just an internal detail which
123 is hidden at the Perl level.
124
125 =head2 Effects of character semantics
126
127 Character semantics have the following effects:
128
129 =over 4
130
131 =item *
132
133 Strings and patterns may contain characters that have an ordinal value
134 larger than 255.
135
136 Presuming you use a Unicode editor to edit your program, such
137 characters will typically occur directly within the literal strings as
138 UTF-8 (or UTF-EBCDIC on EBCDIC platforms) characters, but you can also
139 specify a particular character with an extension of the C<\x>
140 notation.  UTF-X characters are specified by putting the hexadecimal
141 code within curlies after the C<\x>.  For instance, a Unicode smiley
142 face is C<\x{263A}>.
143
144 =item *
145
146 Identifiers within the Perl script may contain Unicode alphanumeric
147 characters, including ideographs.  (You are currently on your own when
148 it comes to using the canonical forms of characters--Perl doesn't
149 (yet) attempt to canonicalize variable names for you.)
150
151 =item *
152
153 Regular expressions match characters instead of bytes.  For instance,
154 "." matches a character instead of a byte.  (However, the C<\C> pattern
155 is provided to force a match a single byte ("C<char>" in C, hence C<\C>).)
156
157 =item *
158
159 Character classes in regular expressions match characters instead of
160 bytes, and match against the character properties specified in the
161 Unicode properties database.  So C<\w> can be used to match an
162 ideograph, for instance.
163
164 =item *
165
166 Named Unicode properties and block ranges make be used as character
167 classes via the new C<\p{}> (matches property) and C<\P{}> (doesn't
168 match property) constructs.  For instance, C<\p{Lu}> matches any
169 character with the Unicode uppercase property, while C<\p{M}> matches
170 any mark character.  Single letter properties may omit the brackets,
171 so that can be written C<\pM> also.  Many predefined character classes
172 are available, such as C<\p{IsMirrored}> and C<\p{InTibetan}>.
173
174 The C<\p{Is...}> test for "general properties" such as "letter",
175 "digit", while the C<\p{In...}> test for Unicode scripts and blocks.
176
177 The official Unicode script and block names have spaces and dashes and
178 separators, but for convenience you can have dashes, spaces, and
179 underbars at every word division, and you need not care about correct
180 casing.  It is recommended, however, that for consistency you use the
181 following naming: the official Unicode script, block, or property name
182 (see below for the additional rules that apply to block names),
183 with whitespace and dashes replaced with underbar, and the words
184 "uppercase-first-lowercase-rest".  That is, "Latin-1 Supplement"
185 becomes "Latin_1_Supplement".
186
187 You can also negate both C<\p{}> and C<\P{}> by introducing a caret
188 (^) between the first curly and the property name: C<\p{^In_Tamil}> is
189 equal to C<\P{In_Tamil}>.
190
191 The C<In> and C<Is> can be left out: C<\p{Greek}> is equal to
192 C<\p{In_Greek}>, C<\P{Pd}> is equal to C<\P{Pd}>.
193
194     Short       Long
195
196     L           Letter
197     Lu          Uppercase_Letter
198     Ll          Lowercase_Letter
199     Lt          Titlecase_Letter
200     Lm          Modifier_Letter
201     Lo          Other_Letter
202
203     M           Mark
204     Mn          Nonspacing_Mark
205     Mc          Spacing_Mark
206     Me          Enclosing_Mark
207
208     N           Number
209     Nd          Decimal_Number
210     Nl          Letter_Number
211     No          Other_Number
212
213     P           Punctuation
214     Pc          Connector_Punctuation
215     Pd          Dash_Punctuation
216     Ps          Open_Punctuation
217     Pe          Close_Punctuation
218     Pi          Initial_Punctuation
219                 (may behave like Ps or Pe depending on usage)
220     Pf          Final_Punctuation
221                 (may behave like Ps or Pe depending on usage)
222     Po          Other_Punctuation
223
224     S           Symbol
225     Sm          Math_Symbol
226     Sc          Currency_Symbol
227     Sk          Modifier_Symbol
228     So          Other_Symbol
229
230     Z           Separator
231     Zs          Space_Separator
232     Zl          Line_Separator
233     Zp          Paragraph_Separator
234
235     C           Other
236     Cc          Control
237     Cf          Format
238     Cs          Surrogate
239     Co          Private_Use
240     Cn          Unassigned
241
242 There's also C<L&> which is an alias for C<Ll>, C<Lu>, and C<Lt>.
243
244 The following reserved ranges have C<In> tests:
245
246     CJK_Ideograph_Extension_A
247     CJK_Ideograph
248     Hangul_Syllable
249     Non_Private_Use_High_Surrogate
250     Private_Use_High_Surrogate
251     Low_Surrogate
252     Private_Surrogate
253     CJK_Ideograph_Extension_B
254     Plane_15_Private_Use
255     Plane_16_Private_Use
256
257 For example C<"\x{AC00}" =~ \p{HangulSyllable}> will test true.
258 (Handling of surrogates is not implemented yet, because Perl
259 uses UTF-8 and not UTF-16 internally to represent Unicode.)
260
261 Additionally, because scripts differ in their directionality
262 (for example Hebrew is written right to left), all characters
263 have their directionality defined:
264
265     BidiL       Left-to-Right
266     BidiLRE     Left-to-Right Embedding
267     BidiLRO     Left-to-Right Override
268     BidiR       Right-to-Left
269     BidiAL      Right-to-Left Arabic
270     BidiRLE     Right-to-Left Embedding
271     BidiRLO     Right-to-Left Override
272     BidiPDF     Pop Directional Format
273     BidiEN      European Number
274     BidiES      European Number Separator
275     BidiET      European Number Terminator
276     BidiAN      Arabic Number
277     BidiCS      Common Number Separator
278     BidiNSM     Non-Spacing Mark
279     BidiBN      Boundary Neutral
280     BidiB       Paragraph Separator
281     BidiS       Segment Separator
282     BidiWS      Whitespace
283     BidiON      Other Neutrals
284
285 =head2 Scripts
286
287 The scripts available for C<\p{In...}> and C<\P{In...}>, for example
288 \p{InCyrillic>, are as follows, for example C<\p{InLatin}> or C<\P{InHan}>:
289
290     Arabic
291     Armenian
292     Bengali
293     Bopomofo
294     Canadian-Aboriginal
295     Cherokee
296     Cyrillic
297     Deseret
298     Devanagari
299     Ethiopic
300     Georgian
301     Gothic
302     Greek
303     Gujarati
304     Gurmukhi
305     Han
306     Hangul
307     Hebrew
308     Hiragana
309     Inherited
310     Kannada
311     Katakana
312     Khmer
313     Lao
314     Latin
315     Malayalam
316     Mongolian
317     Myanmar
318     Ogham
319     Old-Italic
320     Oriya
321     Runic
322     Sinhala
323     Syriac
324     Tamil
325     Telugu
326     Thaana
327     Thai
328     Tibetan
329     Yi
330
331 There are also extended property classes that supplement the basic
332 properties, defined by the F<PropList> Unicode database:
333
334     ASCII_Hex_Digit
335     Bidi_Control
336     Dash
337     Diacritic
338     Extender
339     Hex_Digit
340     Hyphen
341     Ideographic
342     Join_Control
343     Noncharacter_Code_Point
344     Other_Alphabetic
345     Other_Lowercase
346     Other_Math
347     Other_Uppercase
348     Quotation_Mark
349     White_Space
350
351 and further derived properties:
352
353     Alphabetic      Lu + Ll + Lt + Lm + Lo + Other_Alphabetic
354     Lowercase       Ll + Other_Lowercase
355     Uppercase       Lu + Other_Uppercase
356     Math            Sm + Other_Math
357
358     ID_Start        Lu + Ll + Lt + Lm + Lo + Nl
359     ID_Continue     ID_Start + Mn + Mc + Nd + Pc
360
361     Any             Any character
362     Assigned        Any non-Cn character
363     Common          Any character (or unassigned code point)
364                     not explicitly assigned to a script
365
366 =head2 Blocks
367
368 In addition to B<scripts>, Unicode also defines B<blocks> of
369 characters.  The difference between scripts and blocks is that the
370 scripts concept is closer to natural languages, while the blocks
371 concept is more an artificial grouping based on groups of 256 Unicode
372 characters.  For example, the C<Latin> script contains letters from
373 many blocks.  On the other hand, the C<Latin> script does not contain
374 all the characters from those blocks, it does not for example contain
375 digits because digits are shared across many scripts.  Digits and
376 other similar groups, like punctuation, are in a category called
377 C<Common>.
378
379 For more about scripts see the UTR #24:
380 http://www.unicode.org/unicode/reports/tr24/
381 For more about blocks see
382 http://www.unicode.org/Public/UNIDATA/Blocks.txt
383
384 Because there are overlaps in naming (there are, for example, both
385 a script called C<Katakana> and a block called C<Katakana>, the block
386 version has C<Block> appended to its name, C<\p{InKatakanaBlock}>.
387
388 Notice that this definition was introduced in Perl 5.8.0: in Perl
389 5.6 only the blocks were used; in Perl 5.8.0 scripts became the
390 preferential Unicode character class definition; this meant that
391 the definitions of some character classes changed (the ones in the
392 below list that have the C<Block> appended).
393
394    Alphabetic Presentation Forms
395    Arabic Block
396    Arabic Presentation Forms-A
397    Arabic Presentation Forms-B
398    Armenian Block
399    Arrows
400    Basic Latin
401    Bengali Block
402    Block Elements
403    Bopomofo Block
404    Bopomofo Extended
405    Box Drawing
406    Braille Patterns
407    Byzantine Musical Symbols
408    CJK Compatibility
409    CJK Compatibility Forms
410    CJK Compatibility Ideographs
411    CJK Compatibility Ideographs Supplement
412    CJK Radicals Supplement
413    CJK Symbols and Punctuation
414    CJK Unified Ideographs
415    CJK Unified Ideographs Extension A
416    CJK Unified Ideographs Extension B
417    Cherokee Block
418    Combining Diacritical Marks
419    Combining Half Marks
420    Combining Marks for Symbols
421    Control Pictures
422    Currency Symbols
423    Cyrillic Block
424    Deseret Block
425    Devanagari Block
426    Dingbats
427    Enclosed Alphanumerics
428    Enclosed CJK Letters and Months
429    Ethiopic Block
430    General Punctuation
431    Geometric Shapes
432    Georgian Block
433    Gothic Block
434    Greek Block
435    Greek Extended
436    Gujarati Block
437    Gurmukhi Block
438    Halfwidth and Fullwidth Forms
439    Hangul Compatibility Jamo
440    Hangul Jamo
441    Hangul Syllables
442    Hebrew Block
443    High Private Use Surrogates
444    High Surrogates
445    Hiragana Block
446    IPA Extensions
447    Ideographic Description Characters
448    Kanbun
449    Kangxi Radicals
450    Kannada Block
451    Katakana Block
452    Khmer Block
453    Lao Block
454    Latin 1 Supplement
455    Latin Extended Additional
456    Latin Extended-A
457    Latin Extended-B
458    Letterlike Symbols
459    Low Surrogates
460    Malayalam Block
461    Mathematical Alphanumeric Symbols
462    Mathematical Operators
463    Miscellaneous Symbols
464    Miscellaneous Technical
465    Mongolian Block
466    Musical Symbols
467    Myanmar Block
468    Number Forms
469    Ogham Block
470    Old Italic Block
471    Optical Character Recognition
472    Oriya Block
473    Private Use
474    Runic Block
475    Sinhala Block
476    Small Form Variants
477    Spacing Modifier Letters
478    Specials
479    Superscripts and Subscripts
480    Syriac Block
481    Tags
482    Tamil Block
483    Telugu Block
484    Thaana Block
485    Thai Block
486    Tibetan Block
487    Unified Canadian Aboriginal Syllabics
488    Yi Radicals
489    Yi Syllables
490
491 =item *
492
493 The special pattern C<\X> match matches any extended Unicode sequence
494 (a "combining character sequence" in Standardese), where the first
495 character is a base character and subsequent characters are mark
496 characters that apply to the base character.  It is equivalent to
497 C<(?:\PM\pM*)>.
498
499 =item *
500
501 The C<tr///> operator translates characters instead of bytes.  Note
502 that the C<tr///CU> functionality has been removed, as the interface
503 was a mistake.  For similar functionality see pack('U0', ...) and
504 pack('C0', ...).
505
506 =item *
507
508 Case translation operators use the Unicode case translation tables
509 when provided character input.  Note that C<uc()> (also known as C<\U>
510 in doublequoted strings) translates to uppercase, while C<ucfirst>
511 (also known as C<\u> in doublequoted strings) translates to titlecase
512 (for languages that make the distinction).  Naturally the
513 corresponding backslash sequences have the same semantics.
514
515 =item *
516
517 Most operators that deal with positions or lengths in the string will
518 automatically switch to using character positions, including
519 C<chop()>, C<substr()>, C<pos()>, C<index()>, C<rindex()>,
520 C<sprintf()>, C<write()>, and C<length()>.  Operators that
521 specifically don't switch include C<vec()>, C<pack()>, and
522 C<unpack()>.  Operators that really don't care include C<chomp()>, as
523 well as any other operator that treats a string as a bucket of bits,
524 such as C<sort()>, and the operators dealing with filenames.
525
526 =item *
527
528 The C<pack()>/C<unpack()> letters "C<c>" and "C<C>" do I<not> change,
529 since they're often used for byte-oriented formats.  (Again, think
530 "C<char>" in the C language.)  However, there is a new "C<U>" specifier
531 that will convert between UTF-8 characters and integers.  (It works
532 outside of the utf8 pragma too.)
533
534 =item *
535
536 The C<chr()> and C<ord()> functions work on characters.  This is like
537 C<pack("U")> and C<unpack("U")>, not like C<pack("C")> and
538 C<unpack("C")>.  In fact, the latter are how you now emulate
539 byte-oriented C<chr()> and C<ord()> for Unicode strings.
540 (Note that this reveals the internal UTF-8 encoding of strings and
541 you are not supposed to do that unless you know what you are doing.)
542
543 =item *
544
545 The bit string operators C<& | ^ ~> can operate on character data.
546 However, for backward compatibility reasons (bit string operations
547 when the characters all are less than 256 in ordinal value) one should
548 not mix C<~> (the bit complement) and characters both less than 256 and
549 equal or greater than 256.  Most importantly, the DeMorgan's laws
550 (C<~($x|$y) eq ~$x&~$y>, C<~($x&$y) eq ~$x|~$y>) won't hold.
551 Another way to look at this is that the complement cannot return
552 B<both> the 8-bit (byte) wide bit complement B<and> the full character
553 wide bit complement.
554
555 =item *
556
557 lc(), uc(), lcfirst(), and ucfirst() work for the following cases:
558
559 =over 8
560
561 =item *
562
563 the case mapping is from a single Unicode character to another
564 single Unicode character
565
566 =item *
567
568 the case mapping is from a single Unicode character to more
569 than one Unicode character
570
571 =back
572
573 What doesn't yet work are the followng cases:
574
575 =over 8
576
577 =item *
578
579 the "final sigma" (Greek)
580
581 =item *
582
583 anything to with locales (Lithuanian, Turkish, Azeri)
584
585 =back
586
587 See the Unicode Technical Report #21, Case Mappings, for more details.
588
589 =item *
590
591 And finally, C<scalar reverse()> reverses by character rather than by byte.
592
593 =back
594
595 =head2 Character encodings for input and output
596
597 See L<Encode>.
598
599 =head1 CAVEATS
600
601 As of yet, there is no method for automatically coercing input and
602 output to some encoding other than UTF-8 or UTF-EBCDIC.  This is planned 
603 in the near future, however.
604
605 Whether an arbitrary piece of data will be treated as "characters" or
606 "bytes" by internal operations cannot be divined at the current time.
607
608 Use of locales with utf8 may lead to odd results.  Currently there is
609 some attempt to apply 8-bit locale info to characters in the range
610 0..255, but this is demonstrably incorrect for locales that use
611 characters above that range (when mapped into Unicode).  It will also
612 tend to run slower.  Avoidance of locales is strongly encouraged.
613
614 =head1 UNICODE REGULAR EXPRESSION SUPPORT LEVEL
615
616 The following list of Unicode regular expression support describes
617 feature by feature the Unicode support implemented in Perl as of Perl
618 5.8.0.  The "Level N" and the section numbers refer to the Unicode
619 Technical Report 18, "Unicode Regular Expression Guidelines".
620
621 =over 4
622
623 =item *
624
625 Level 1 - Basic Unicode Support
626
627         2.1 Hex Notation                        - done          [1]
628                 Named Notation                  - done          [2]
629         2.2 Categories                          - done          [3][4]
630         2.3 Subtraction                         - MISSING       [5][6]
631         2.4 Simple Word Boundaries              - done          [7]
632         2.5 Simple Loose Matches                - MISSING       [8]
633         2.6 End of Line                         - MISSING       [9][10]
634
635         [ 1] \x{...}
636         [ 2] \N{...}
637         [ 3] . \p{Is...} \P{Is...}
638         [ 4] now scripts (see UTR#24 Script Names) in  addition to blocks
639         [ 5] have negation
640         [ 6] can use look-ahead to emulate subtracion
641         [ 7] include Letters in word characters
642         [ 8] see UTR#21 Case Mappings
643         [ 9] see UTR#13 Unicode Newline Guidelines
644         [10] should do ^ and $ also on \x{2028} and \x{2029}
645
646 =item *
647
648 Level 2 - Extended Unicode Support
649
650         3.1 Surrogates                          - MISSING
651         3.2 Canonical Equivalents               - MISSING       [11][12]
652         3.3 Locale-Independent Graphemes        - MISSING       [13]
653         3.4 Locale-Independent Words            - MISSING       [14]
654         3.5 Locale-Independent Loose Matches    - MISSING       [15]
655
656         [11] see UTR#15 Unicode Normalization
657         [12] have Unicode::Normalize but not integrated to regexes
658         [13] have \X but at this level . should equal that
659         [14] need three classes, not just \w and \W
660         [15] see UTR#21 Case Mappings
661
662 =item *
663
664 Level 3 - Locale-Sensitive Support
665
666         4.1 Locale-Dependent Categories         - MISSING
667         4.2 Locale-Dependent Graphemes          - MISSING       [16][17]
668         4.3 Locale-Dependent Words              - MISSING
669         4.4 Locale-Dependent Loose Matches      - MISSING
670         4.5 Locale-Dependent Ranges             - MISSING
671
672         [16] see UTR#10 Unicode Collation Algorithms
673         [17] have Unicode::Collate but not integrated to regexes
674
675 =back
676
677 =head1 SEE ALSO
678
679 L<bytes>, L<utf8>, L<perlretut>, L<perlvar/"${^WIDE_SYSTEM_CALLS}">
680
681 =cut