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