1# -*- mode: Perl; buffer-read-only: t -*- 2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! 3# This file is built by regen/feature.pl. 4# Any changes made here will be lost! 5 6package feature; 7our $VERSION = '1.82'; 8 9our %feature = ( 10 fc => 'feature_fc', 11 isa => 'feature_isa', 12 say => 'feature_say', 13 try => 'feature_try', 14 class => 'feature_class', 15 defer => 'feature_defer', 16 state => 'feature_state', 17 switch => 'feature_switch', 18 bitwise => 'feature_bitwise', 19 indirect => 'feature_indirect', 20 evalbytes => 'feature_evalbytes', 21 signatures => 'feature_signatures', 22 current_sub => 'feature___SUB__', 23 module_true => 'feature_module_true', 24 refaliasing => 'feature_refaliasing', 25 postderef_qq => 'feature_postderef_qq', 26 unicode_eval => 'feature_unieval', 27 declared_refs => 'feature_myref', 28 unicode_strings => 'feature_unicode', 29 multidimensional => 'feature_multidimensional', 30 bareword_filehandles => 'feature_bareword_filehandles', 31 extra_paired_delimiters => 'feature_more_delims', 32); 33 34our %feature_bundle = ( 35 "5.10" => [qw(bareword_filehandles indirect multidimensional say state switch)], 36 "5.11" => [qw(bareword_filehandles indirect multidimensional say state switch unicode_strings)], 37 "5.15" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)], 38 "5.23" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], 39 "5.27" => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], 40 "5.35" => [qw(bareword_filehandles bitwise current_sub evalbytes fc isa postderef_qq say signatures state unicode_eval unicode_strings)], 41 "5.37" => [qw(bitwise current_sub evalbytes fc isa module_true postderef_qq say signatures state unicode_eval unicode_strings)], 42 "all" => [qw(bareword_filehandles bitwise class current_sub declared_refs defer evalbytes extra_paired_delimiters fc indirect isa module_true multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)], 43 "default" => [qw(bareword_filehandles indirect multidimensional)], 44); 45 46$feature_bundle{"5.12"} = $feature_bundle{"5.11"}; 47$feature_bundle{"5.13"} = $feature_bundle{"5.11"}; 48$feature_bundle{"5.14"} = $feature_bundle{"5.11"}; 49$feature_bundle{"5.16"} = $feature_bundle{"5.15"}; 50$feature_bundle{"5.17"} = $feature_bundle{"5.15"}; 51$feature_bundle{"5.18"} = $feature_bundle{"5.15"}; 52$feature_bundle{"5.19"} = $feature_bundle{"5.15"}; 53$feature_bundle{"5.20"} = $feature_bundle{"5.15"}; 54$feature_bundle{"5.21"} = $feature_bundle{"5.15"}; 55$feature_bundle{"5.22"} = $feature_bundle{"5.15"}; 56$feature_bundle{"5.24"} = $feature_bundle{"5.23"}; 57$feature_bundle{"5.25"} = $feature_bundle{"5.23"}; 58$feature_bundle{"5.26"} = $feature_bundle{"5.23"}; 59$feature_bundle{"5.28"} = $feature_bundle{"5.27"}; 60$feature_bundle{"5.29"} = $feature_bundle{"5.27"}; 61$feature_bundle{"5.30"} = $feature_bundle{"5.27"}; 62$feature_bundle{"5.31"} = $feature_bundle{"5.27"}; 63$feature_bundle{"5.32"} = $feature_bundle{"5.27"}; 64$feature_bundle{"5.33"} = $feature_bundle{"5.27"}; 65$feature_bundle{"5.34"} = $feature_bundle{"5.27"}; 66$feature_bundle{"5.36"} = $feature_bundle{"5.35"}; 67$feature_bundle{"5.38"} = $feature_bundle{"5.37"}; 68$feature_bundle{"5.9.5"} = $feature_bundle{"5.10"}; 69my %noops = ( 70 postderef => 1, 71 lexical_subs => 1, 72); 73my %removed = ( 74 array_base => 1, 75); 76 77our $hint_shift = 26; 78our $hint_mask = 0x3c000000; 79our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 5.35 5.37 ); 80 81# This gets set (for now) in $^H as well as in %^H, 82# for runtime speed of the uc/lc/ucfirst/lcfirst functions. 83# See HINT_UNI_8_BIT in perl.h. 84our $hint_uni8bit = 0x00000800; 85 86# TODO: 87# - think about versioned features (use feature switch => 2) 88 89=encoding utf8 90 91=head1 NAME 92 93feature - Perl pragma to enable new features 94 95=head1 SYNOPSIS 96 97 use feature qw(fc say); 98 99 # Without the "use feature" above, this code would not be able to find 100 # the built-ins "say" or "fc": 101 say "The case-folded version of $x is: " . fc $x; 102 103 104 # set features to match the :5.36 bundle, which may turn off or on 105 # multiple features (see "FEATURE BUNDLES" below) 106 use feature ':5.36'; 107 108 109 # implicitly loads :5.36 feature bundle 110 use v5.36; 111 112=head1 DESCRIPTION 113 114It is usually impossible to add new syntax to Perl without breaking 115some existing programs. This pragma provides a way to minimize that 116risk. New syntactic constructs, or new semantic meanings to older 117constructs, can be enabled by C<use feature 'foo'>, and will be parsed 118only when the appropriate feature pragma is in scope. (Nevertheless, the 119C<CORE::> prefix provides access to all Perl keywords, regardless of this 120pragma.) 121 122=head2 Lexical effect 123 124Like other pragmas (C<use strict>, for example), features have a lexical 125effect. C<use feature qw(foo)> will only make the feature "foo" available 126from that point to the end of the enclosing block. 127 128 { 129 use feature 'say'; 130 say "say is available here"; 131 } 132 print "But not here.\n"; 133 134=head2 C<no feature> 135 136Features can also be turned off by using C<no feature "foo">. This too 137has lexical effect. 138 139 use feature 'say'; 140 say "say is available here"; 141 { 142 no feature 'say'; 143 print "But not here.\n"; 144 } 145 say "Yet it is here."; 146 147C<no feature> with no features specified will reset to the default group. To 148disable I<all> features (an unusual request!) use C<no feature ':all'>. 149 150=head1 AVAILABLE FEATURES 151 152Read L</"FEATURE BUNDLES"> for the feature cheat sheet summary. 153 154=head2 The 'say' feature 155 156C<use feature 'say'> tells the compiler to enable the Raku-inspired 157C<say> function. 158 159See L<perlfunc/say> for details. 160 161This feature is available starting with Perl 5.10. 162 163=head2 The 'state' feature 164 165C<use feature 'state'> tells the compiler to enable C<state> 166variables. 167 168See L<perlsub/"Persistent Private Variables"> for details. 169 170This feature is available starting with Perl 5.10. 171 172=head2 The 'switch' feature 173 174B<WARNING>: This feature is still experimental and the implementation may 175change or be removed in future versions of Perl. For this reason, Perl will 176warn when you use the feature, unless you have explicitly disabled the warning: 177 178 no warnings "experimental::smartmatch"; 179 180C<use feature 'switch'> tells the compiler to enable the Raku 181given/when construct. 182 183See L<perlsyn/"Switch Statements"> for details. 184 185This feature is available starting with Perl 5.10. 186It is deprecated starting with Perl 5.38, and using 187C<given>, C<when> or smartmatch will throw a warning. 188It will be removed in Perl 5.42. 189 190=head2 The 'unicode_strings' feature 191 192C<use feature 'unicode_strings'> tells the compiler to use Unicode rules 193in all string operations executed within its scope (unless they are also 194within the scope of either C<use locale> or C<use bytes>). The same applies 195to all regular expressions compiled within the scope, even if executed outside 196it. It does not change the internal representation of strings, but only how 197they are interpreted. 198 199C<no feature 'unicode_strings'> tells the compiler to use the traditional 200Perl rules wherein the native character set rules is used unless it is 201clear to Perl that Unicode is desired. This can lead to some surprises 202when the behavior suddenly changes. (See 203L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are 204potentially using Unicode in your program, the 205C<use feature 'unicode_strings'> subpragma is B<strongly> recommended. 206 207This feature is available starting with Perl 5.12; was almost fully 208implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>; 209was extended further in Perl 5.26 to cover L<the range 210operator|perlop/Range Operators>; and was extended again in Perl 5.28 to 211cover L<special-cased whitespace splitting|perlfunc/split>. 212 213=head2 The 'unicode_eval' and 'evalbytes' features 214 215Together, these two features are intended to replace the legacy string 216C<eval> function, which behaves problematically in some instances. They are 217available starting with Perl 5.16, and are enabled by default by a 218S<C<use 5.16>> or higher declaration. 219 220C<unicode_eval> changes the behavior of plain string C<eval> to work more 221consistently, especially in the Unicode world. Certain (mis)behaviors 222couldn't be changed without breaking some things that had come to rely on 223them, so the feature can be enabled and disabled. Details are at 224L<perlfunc/Under the "unicode_eval" feature>. 225 226C<evalbytes> is like string C<eval>, but it treats its argument as a byte 227string. Details are at L<perlfunc/evalbytes EXPR>. Without a 228S<C<use feature 'evalbytes'>> nor a S<C<use v5.16>> (or higher) declaration in 229the current scope, you can still access it by instead writing 230C<CORE::evalbytes>. 231 232=head2 The 'current_sub' feature 233 234This provides the C<__SUB__> token that returns a reference to the current 235subroutine or C<undef> outside of a subroutine. 236 237This feature is available starting with Perl 5.16. 238 239=head2 The 'array_base' feature 240 241This feature supported the legacy C<$[> variable. See L<perlvar/$[>. 242It was on by default but disabled under C<use v5.16> (see 243L</IMPLICIT LOADING>, below) and unavailable since perl 5.30. 244 245This feature is available under this name starting with Perl 5.16. In 246previous versions, it was simply on all the time, and this pragma knew 247nothing about it. 248 249=head2 The 'fc' feature 250 251C<use feature 'fc'> tells the compiler to enable the C<fc> function, 252which implements Unicode casefolding. 253 254See L<perlfunc/fc> for details. 255 256This feature is available from Perl 5.16 onwards. 257 258=head2 The 'lexical_subs' feature 259 260In Perl versions prior to 5.26, this feature enabled 261declaration of subroutines via C<my sub foo>, C<state sub foo> 262and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details. 263 264This feature is available from Perl 5.18 onwards. From Perl 5.18 to 5.24, 265it was classed as experimental, and Perl emitted a warning for its 266usage, except when explicitly disabled: 267 268 no warnings "experimental::lexical_subs"; 269 270As of Perl 5.26, use of this feature no longer triggers a warning, though 271the C<experimental::lexical_subs> warning category still exists (for 272compatibility with code that disables it). In addition, this syntax is 273not only no longer experimental, but it is enabled for all Perl code, 274regardless of what feature declarations are in scope. 275 276=head2 The 'postderef' and 'postderef_qq' features 277 278The 'postderef_qq' feature extends the applicability of L<postfix 279dereference syntax|perlref/Postfix Dereference Syntax> so that 280postfix array dereference, postfix scalar dereference, and 281postfix array highest index access are available in double-quotish interpolations. 282For example, it makes the following two statements equivalent: 283 284 my $s = "[@{ $h->{a} }]"; 285 my $s = "[$h->{a}->@*]"; 286 287This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it 288was classed as experimental, and Perl emitted a warning for its 289usage, except when explicitly disabled: 290 291 no warnings "experimental::postderef"; 292 293As of Perl 5.24, use of this feature no longer triggers a warning, though 294the C<experimental::postderef> warning category still exists (for 295compatibility with code that disables it). 296 297The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable 298postfix dereference syntax outside double-quotish interpolations. In those 299versions, using it triggered the C<experimental::postderef> warning in the 300same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is 301not only no longer experimental, but it is enabled for all Perl code, 302regardless of what feature declarations are in scope. 303 304=head2 The 'signatures' feature 305 306This enables syntax for declaring subroutine arguments as lexical variables. 307For example, for this subroutine: 308 309 sub foo ($left, $right) { 310 return $left + $right; 311 } 312 313Calling C<foo(3, 7)> will assign C<3> into C<$left> and C<7> into C<$right>. 314 315See L<perlsub/Signatures> for details. 316 317This feature is available from Perl 5.20 onwards. From Perl 5.20 to 5.34, 318it was classed as experimental, and Perl emitted a warning for its usage, 319except when explicitly disabled: 320 321 no warnings "experimental::signatures"; 322 323As of Perl 5.36, use of this feature no longer triggers a warning, though the 324C<experimental::signatures> warning category still exists (for compatibility 325with code that disables it). This feature is now considered stable, and is 326enabled automatically by C<use v5.36> (or higher). 327 328=head2 The 'refaliasing' feature 329 330B<WARNING>: This feature is still experimental and the implementation may 331change or be removed in future versions of Perl. For this reason, Perl will 332warn when you use the feature, unless you have explicitly disabled the warning: 333 334 no warnings "experimental::refaliasing"; 335 336This enables aliasing via assignment to references: 337 338 \$a = \$b; # $a and $b now point to the same scalar 339 \@a = \@b; # to the same array 340 \%a = \%b; 341 \&a = \&b; 342 foreach \%hash (@array_of_hash_refs) { 343 ... 344 } 345 346See L<perlref/Assigning to References> for details. 347 348This feature is available from Perl 5.22 onwards. 349 350=head2 The 'bitwise' feature 351 352This makes the four standard bitwise operators (C<& | ^ ~>) treat their 353operands consistently as numbers, and introduces four new dotted operators 354(C<&. |. ^. ~.>) that treat their operands consistently as strings. The 355same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>). 356 357See L<perlop/Bitwise String Operators> for details. 358 359This feature is available from Perl 5.22 onwards. Starting in Perl 5.28, 360C<use v5.28> will enable the feature. Before 5.28, it was still 361experimental and would emit a warning in the "experimental::bitwise" 362category. 363 364=head2 The 'declared_refs' feature 365 366B<WARNING>: This feature is still experimental and the implementation may 367change or be removed in future versions of Perl. For this reason, Perl will 368warn when you use the feature, unless you have explicitly disabled the warning: 369 370 no warnings "experimental::declared_refs"; 371 372This allows a reference to a variable to be declared with C<my>, C<state>, 373or C<our>, or localized with C<local>. It is intended mainly for use in 374conjunction with the "refaliasing" feature. See L<perlref/Declaring a 375Reference to a Variable> for examples. 376 377This feature is available from Perl 5.26 onwards. 378 379=head2 The 'isa' feature 380 381This allows the use of the C<isa> infix operator, which tests whether the 382scalar given by the left operand is an object of the class given by the 383right operand. See L<perlop/Class Instance Operator> for more details. 384 385This feature is available from Perl 5.32 onwards. From Perl 5.32 to 5.34, 386it was classed as experimental, and Perl emitted a warning for its usage, 387except when explicitly disabled: 388 389 no warnings "experimental::isa"; 390 391As of Perl 5.36, use of this feature no longer triggers a warning (though the 392C<experimental::isa> warning category stilll exists for compatibility with 393code that disables it). This feature is now considered stable, and is enabled 394automatically by C<use v5.36> (or higher). 395 396=head2 The 'indirect' feature 397 398This feature allows the use of L<indirect object 399syntax|perlobj/Indirect Object Syntax> for method calls, e.g. C<new 400Foo 1, 2;>. It is enabled by default, but can be turned off to 401disallow indirect object syntax. 402 403This feature is available under this name from Perl 5.32 onwards. In 404previous versions, it was simply on all the time. To disallow (or 405warn on) indirect object syntax on older Perls, see the L<indirect> 406CPAN module. 407 408=head2 The 'multidimensional' feature 409 410This feature enables multidimensional array emulation, a perl 4 (or 411earlier) feature that was used to emulate multidimensional arrays with 412hashes. This works by converting code like C<< $foo{$x, $y} >> into 413C<< $foo{join($;, $x, $y)} >>. It is enabled by default, but can be 414turned off to disable multidimensional array emulation. 415 416When this feature is disabled the syntax that is normally replaced 417will report a compilation error. 418 419This feature is available under this name from Perl 5.34 onwards. In 420previous versions, it was simply on all the time. 421 422You can use the L<multidimensional> module on CPAN to disable 423multidimensional array emulation for older versions of Perl. 424 425=head2 The 'bareword_filehandles' feature 426 427This feature enables bareword filehandles for builtin functions 428operations, a generally discouraged practice. It is enabled by 429default, but can be turned off to disable bareword filehandles, except 430for the exceptions listed below. 431 432The perl built-in filehandles C<STDIN>, C<STDOUT>, C<STDERR>, C<DATA>, 433C<ARGV>, C<ARGVOUT> and the special C<_> are always enabled. 434 435This feature is enabled under this name from Perl 5.34 onwards. In 436previous versions it was simply on all the time. 437 438You can use the L<bareword::filehandles> module on CPAN to disable 439bareword filehandles for older versions of perl. 440 441=head2 The 'try' feature 442 443B<WARNING>: This feature is still experimental and the implementation may 444change or be removed in future versions of Perl. For this reason, Perl will 445warn when you use the feature, unless you have explicitly disabled the warning: 446 447 no warnings "experimental::try"; 448 449This feature enables the C<try> and C<catch> syntax, which allows exception 450handling, where exceptions thrown from the body of the block introduced with 451C<try> are caught by executing the body of the C<catch> block. 452 453For more information, see L<perlsyn/"Try Catch Exception Handling">. 454 455=head2 The 'defer' feature 456 457B<WARNING>: This feature is still experimental and the implementation may 458change or be removed in future versions of Perl. For this reason, Perl will 459warn when you use the feature, unless you have explicitly disabled the warning: 460 461 no warnings "experimental::defer"; 462 463This feature enables the C<defer> block syntax, which allows a block of code 464to be deferred until when the flow of control leaves the block which contained 465it. For more details, see L<perlsyn/defer>. 466 467=head2 The 'extra_paired_delimiters' feature 468 469B<WARNING>: This feature is still experimental and the implementation may 470change or be removed in future versions of Perl. For this reason, Perl will 471warn when you use the feature, unless you have explicitly disabled the warning: 472 473 no warnings "experimental::extra_paired_delimiters"; 474 475This feature enables the use of more paired string delimiters than the 476traditional four, S<C<< < > >>>, S<C<( )>>, S<C<{ }>>, and S<C<[ ]>>. When 477this feature is on, for example, you can say S<C<qrE<171>patE<187>>>. 478 479As with any usage of non-ASCII delimiters in a UTF-8-encoded source file, you 480will want to ensure the parser will decode the source code from UTF-8 bytes 481with a declaration such as C<use utf8>. 482 483This feature is available starting in Perl 5.36. 484 485The complete list of accepted paired delimiters as of Unicode 14.0 is: 486 487 ( ) U+0028, U+0029 LEFT/RIGHT PARENTHESIS 488 < > U+003C, U+003E LESS-THAN/GREATER-THAN SIGN 489 [ ] U+005B, U+005D LEFT/RIGHT SQUARE BRACKET 490 { } U+007B, U+007D LEFT/RIGHT CURLY BRACKET 491 « » U+00AB, U+00BB LEFT/RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 492 » « U+00BB, U+00AB RIGHT/LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 493 ܆ ܇ U+0706, U+0707 SYRIAC COLON SKEWED LEFT/RIGHT 494 ༺ ༻ U+0F3A, U+0F3B TIBETAN MARK GUG RTAGS GYON, TIBETAN MARK GUG 495 RTAGS GYAS 496 ༼ ༽ U+0F3C, U+0F3D TIBETAN MARK ANG KHANG GYON, TIBETAN MARK ANG 497 KHANG GYAS 498 ᚛ ᚜ U+169B, U+169C OGHAM FEATHER MARK, OGHAM REVERSED FEATHER MARK 499 ‘ ’ U+2018, U+2019 LEFT/RIGHT SINGLE QUOTATION MARK 500 ’ ‘ U+2019, U+2018 RIGHT/LEFT SINGLE QUOTATION MARK 501 “ ” U+201C, U+201D LEFT/RIGHT DOUBLE QUOTATION MARK 502 ” “ U+201D, U+201C RIGHT/LEFT DOUBLE QUOTATION MARK 503 ‵ ′ U+2035, U+2032 REVERSED PRIME, PRIME 504 ‶ ″ U+2036, U+2033 REVERSED DOUBLE PRIME, DOUBLE PRIME 505 ‷ ‴ U+2037, U+2034 REVERSED TRIPLE PRIME, TRIPLE PRIME 506 ‹ › U+2039, U+203A SINGLE LEFT/RIGHT-POINTING ANGLE QUOTATION MARK 507 › ‹ U+203A, U+2039 SINGLE RIGHT/LEFT-POINTING ANGLE QUOTATION MARK 508 ⁅ ⁆ U+2045, U+2046 LEFT/RIGHT SQUARE BRACKET WITH QUILL 509 ⁍ ⁌ U+204D, U+204C BLACK RIGHT/LEFTWARDS BULLET 510 ⁽ ⁾ U+207D, U+207E SUPERSCRIPT LEFT/RIGHT PARENTHESIS 511 ₍ ₎ U+208D, U+208E SUBSCRIPT LEFT/RIGHT PARENTHESIS 512 → ← U+2192, U+2190 RIGHT/LEFTWARDS ARROW 513 ↛ ↚ U+219B, U+219A RIGHT/LEFTWARDS ARROW WITH STROKE 514 ↝ ↜ U+219D, U+219C RIGHT/LEFTWARDS WAVE ARROW 515 ↠ ↞ U+21A0, U+219E RIGHT/LEFTWARDS TWO HEADED ARROW 516 ↣ ↢ U+21A3, U+21A2 RIGHT/LEFTWARDS ARROW WITH TAIL 517 ↦ ↤ U+21A6, U+21A4 RIGHT/LEFTWARDS ARROW FROM BAR 518 ↪ ↩ U+21AA, U+21A9 RIGHT/LEFTWARDS ARROW WITH HOOK 519 ↬ ↫ U+21AC, U+21AB RIGHT/LEFTWARDS ARROW WITH LOOP 520 ↱ ↰ U+21B1, U+21B0 UPWARDS ARROW WITH TIP RIGHT/LEFTWARDS 521 ↳ ↲ U+21B3, U+21B2 DOWNWARDS ARROW WITH TIP RIGHT/LEFTWARDS 522 ⇀ ↼ U+21C0, U+21BC RIGHT/LEFTWARDS HARPOON WITH BARB UPWARDS 523 ⇁ ↽ U+21C1, U+21BD RIGHT/LEFTWARDS HARPOON WITH BARB DOWNWARDS 524 ⇉ ⇇ U+21C9, U+21C7 RIGHT/LEFTWARDS PAIRED ARROWS 525 ⇏ ⇍ U+21CF, U+21CD RIGHT/LEFTWARDS DOUBLE ARROW WITH STROKE 526 ⇒ ⇐ U+21D2, U+21D0 RIGHT/LEFTWARDS DOUBLE ARROW 527 ⇛ ⇚ U+21DB, U+21DA RIGHT/LEFTWARDS TRIPLE ARROW 528 ⇝ ⇜ U+21DD, U+21DC RIGHT/LEFTWARDS SQUIGGLE ARROW 529 ⇢ ⇠ U+21E2, U+21E0 RIGHT/LEFTWARDS DASHED ARROW 530 ⇥ ⇤ U+21E5, U+21E4 RIGHT/LEFTWARDS ARROW TO BAR 531 ⇨ ⇦ U+21E8, U+21E6 RIGHT/LEFTWARDS WHITE ARROW 532 ⇴ ⬰ U+21F4, U+2B30 RIGHT/LEFT ARROW WITH SMALL CIRCLE 533 ⇶ ⬱ U+21F6, U+2B31 THREE RIGHT/LEFTWARDS ARROWS 534 ⇸ ⇷ U+21F8, U+21F7 RIGHT/LEFTWARDS ARROW WITH VERTICAL STROKE 535 ⇻ ⇺ U+21FB, U+21FA RIGHT/LEFTWARDS ARROW WITH DOUBLE VERTICAL 536 STROKE 537 ⇾ ⇽ U+21FE, U+21FD RIGHT/LEFTWARDS OPEN-HEADED ARROW 538 ∈ ∋ U+2208, U+220B ELEMENT OF, CONTAINS AS MEMBER 539 ∉ ∌ U+2209, U+220C NOT AN ELEMENT OF, DOES NOT CONTAIN AS MEMBER 540 ∊ ∍ U+220A, U+220D SMALL ELEMENT OF, SMALL CONTAINS AS MEMBER 541 ≤ ≥ U+2264, U+2265 LESS-THAN/GREATER-THAN OR EQUAL TO 542 ≦ ≧ U+2266, U+2267 LESS-THAN/GREATER-THAN OVER EQUAL TO 543 ≨ ≩ U+2268, U+2269 LESS-THAN/GREATER-THAN BUT NOT EQUAL TO 544 ≪ ≫ U+226A, U+226B MUCH LESS-THAN/GREATER-THAN 545 ≮ ≯ U+226E, U+226F NOT LESS-THAN/GREATER-THAN 546 ≰ ≱ U+2270, U+2271 NEITHER LESS-THAN/GREATER-THAN NOR EQUAL TO 547 ≲ ≳ U+2272, U+2273 LESS-THAN/GREATER-THAN OR EQUIVALENT TO 548 ≴ ≵ U+2274, U+2275 NEITHER LESS-THAN/GREATER-THAN NOR EQUIVALENT TO 549 ≺ ≻ U+227A, U+227B PRECEDES/SUCCEEDS 550 ≼ ≽ U+227C, U+227D PRECEDES/SUCCEEDS OR EQUAL TO 551 ≾ ≿ U+227E, U+227F PRECEDES/SUCCEEDS OR EQUIVALENT TO 552 ⊀ ⊁ U+2280, U+2281 DOES NOT PRECEDE/SUCCEED 553 ⊂ ⊃ U+2282, U+2283 SUBSET/SUPERSET OF 554 ⊄ ⊅ U+2284, U+2285 NOT A SUBSET/SUPERSET OF 555 ⊆ ⊇ U+2286, U+2287 SUBSET/SUPERSET OF OR EQUAL TO 556 ⊈ ⊉ U+2288, U+2289 NEITHER A SUBSET/SUPERSET OF NOR EQUAL TO 557 ⊊ ⊋ U+228A, U+228B SUBSET/SUPERSET OF WITH NOT EQUAL TO 558 ⊣ ⊢ U+22A3, U+22A2 LEFT/RIGHT TACK 559 ⊦ ⫞ U+22A6, U+2ADE ASSERTION, SHORT LEFT TACK 560 ⊨ ⫤ U+22A8, U+2AE4 TRUE, VERTICAL BAR DOUBLE LEFT TURNSTILE 561 ⊩ ⫣ U+22A9, U+2AE3 FORCES, DOUBLE VERTICAL BAR LEFT TURNSTILE 562 ⊰ ⊱ U+22B0, U+22B1 PRECEDES/SUCCEEDS UNDER RELATION 563 ⋐ ⋑ U+22D0, U+22D1 DOUBLE SUBSET/SUPERSET 564 ⋖ ⋗ U+22D6, U+22D7 LESS-THAN/GREATER-THAN WITH DOT 565 ⋘ ⋙ U+22D8, U+22D9 VERY MUCH LESS-THAN/GREATER-THAN 566 ⋜ ⋝ U+22DC, U+22DD EQUAL TO OR LESS-THAN/GREATER-THAN 567 ⋞ ⋟ U+22DE, U+22DF EQUAL TO OR PRECEDES/SUCCEEDS 568 ⋠ ⋡ U+22E0, U+22E1 DOES NOT PRECEDE/SUCCEED OR EQUAL 569 ⋦ ⋧ U+22E6, U+22E7 LESS-THAN/GREATER-THAN BUT NOT EQUIVALENT TO 570 ⋨ ⋩ U+22E8, U+22E9 PRECEDES/SUCCEEDS BUT NOT EQUIVALENT TO 571 ⋲ ⋺ U+22F2, U+22FA ELEMENT OF/CONTAINS WITH LONG HORIZONTAL STROKE 572 ⋳ ⋻ U+22F3, U+22FB ELEMENT OF/CONTAINS WITH VERTICAL BAR AT END OF 573 HORIZONTAL STROKE 574 ⋴ ⋼ U+22F4, U+22FC SMALL ELEMENT OF/CONTAINS WITH VERTICAL BAR AT 575 END OF HORIZONTAL STROKE 576 ⋶ ⋽ U+22F6, U+22FD ELEMENT OF/CONTAINS WITH OVERBAR 577 ⋷ ⋾ U+22F7, U+22FE SMALL ELEMENT OF/CONTAINS WITH OVERBAR 578 ⌈ ⌉ U+2308, U+2309 LEFT/RIGHT CEILING 579 ⌊ ⌋ U+230A, U+230B LEFT/RIGHT FLOOR 580 ⌦ ⌫ U+2326, U+232B ERASE TO THE RIGHT/LEFT 581 〈 〉 U+2329, U+232A LEFT/RIGHT-POINTING ANGLE BRACKET 582 ⍈ ⍇ U+2348, U+2347 APL FUNCTIONAL SYMBOL QUAD RIGHT/LEFTWARDS ARROW 583 ⏩ ⏪ U+23E9, U+23EA BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE 584 ⏭ ⏮ U+23ED, U+23EE BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE WITH 585 VERTICAL BAR 586 ☛ ☚ U+261B, U+261A BLACK RIGHT/LEFT POINTING INDEX 587 ☞ ☜ U+261E, U+261C WHITE RIGHT/LEFT POINTING INDEX 588 ⚞ ⚟ U+269E, U+269F THREE LINES CONVERGING RIGHT/LEFT 589 ❨ ❩ U+2768, U+2769 MEDIUM LEFT/RIGHT PARENTHESIS ORNAMENT 590 ❪ ❫ U+276A, U+276B MEDIUM FLATTENED LEFT/RIGHT PARENTHESIS ORNAMENT 591 ❬ ❭ U+276C, U+276D MEDIUM LEFT/RIGHT-POINTING ANGLE BRACKET 592 ORNAMENT 593 ❮ ❯ U+276E, U+276F HEAVY LEFT/RIGHT-POINTING ANGLE QUOTATION MARK 594 ORNAMENT 595 ❰ ❱ U+2770, U+2771 HEAVY LEFT/RIGHT-POINTING ANGLE BRACKET ORNAMENT 596 ❲ ❳ U+2772, U+2773 LIGHT LEFT/RIGHT TORTOISE SHELL BRACKET ORNAMENT 597 ❴ ❵ U+2774, U+2775 MEDIUM LEFT/RIGHT CURLY BRACKET ORNAMENT 598 ⟃ ⟄ U+27C3, U+27C4 OPEN SUBSET/SUPERSET 599 ⟅ ⟆ U+27C5, U+27C6 LEFT/RIGHT S-SHAPED BAG DELIMITER 600 ⟈ ⟉ U+27C8, U+27C9 REVERSE SOLIDUS PRECEDING SUBSET, SUPERSET 601 PRECEDING SOLIDUS 602 ⟞ ⟝ U+27DE, U+27DD LONG LEFT/RIGHT TACK 603 ⟦ ⟧ U+27E6, U+27E7 MATHEMATICAL LEFT/RIGHT WHITE SQUARE BRACKET 604 ⟨ ⟩ U+27E8, U+27E9 MATHEMATICAL LEFT/RIGHT ANGLE BRACKET 605 ⟪ ⟫ U+27EA, U+27EB MATHEMATICAL LEFT/RIGHT DOUBLE ANGLE BRACKET 606 ⟬ ⟭ U+27EC, U+27ED MATHEMATICAL LEFT/RIGHT WHITE TORTOISE SHELL 607 BRACKET 608 ⟮ ⟯ U+27EE, U+27EF MATHEMATICAL LEFT/RIGHT FLATTENED PARENTHESIS 609 ⟴ ⬲ U+27F4, U+2B32 RIGHT/LEFT ARROW WITH CIRCLED PLUS 610 ⟶ ⟵ U+27F6, U+27F5 LONG RIGHT/LEFTWARDS ARROW 611 ⟹ ⟸ U+27F9, U+27F8 LONG RIGHT/LEFTWARDS DOUBLE ARROW 612 ⟼ ⟻ U+27FC, U+27FB LONG RIGHT/LEFTWARDS ARROW FROM BAR 613 ⟾ ⟽ U+27FE, U+27FD LONG RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR 614 ⟿ ⬳ U+27FF, U+2B33 LONG RIGHT/LEFTWARDS SQUIGGLE ARROW 615 ⤀ ⬴ U+2900, U+2B34 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH VERTICAL 616 STROKE 617 ⤁ ⬵ U+2901, U+2B35 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH DOUBLE 618 VERTICAL STROKE 619 ⤃ ⤂ U+2903, U+2902 RIGHT/LEFTWARDS DOUBLE ARROW WITH VERTICAL 620 STROKE 621 ⤅ ⬶ U+2905, U+2B36 RIGHT/LEFTWARDS TWO-HEADED ARROW FROM BAR 622 ⤇ ⤆ U+2907, U+2906 RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR 623 ⤍ ⤌ U+290D, U+290C RIGHT/LEFTWARDS DOUBLE DASH ARROW 624 ⤏ ⤎ U+290F, U+290E RIGHT/LEFTWARDS TRIPLE DASH ARROW 625 ⤐ ⬷ U+2910, U+2B37 RIGHT/LEFTWARDS TWO-HEADED TRIPLE DASH ARROW 626 ⤑ ⬸ U+2911, U+2B38 RIGHT/LEFTWARDS ARROW WITH DOTTED STEM 627 ⤔ ⬹ U+2914, U+2B39 RIGHT/LEFTWARDS ARROW WITH TAIL WITH VERTICAL 628 STROKE 629 ⤕ ⬺ U+2915, U+2B3A RIGHT/LEFTWARDS ARROW WITH TAIL WITH DOUBLE 630 VERTICAL STROKE 631 ⤖ ⬻ U+2916, U+2B3B RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL 632 ⤗ ⬼ U+2917, U+2B3C RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH 633 VERTICAL STROKE 634 ⤘ ⬽ U+2918, U+2B3D RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH 635 DOUBLE VERTICAL STROKE 636 ⤚ ⤙ U+291A, U+2919 RIGHT/LEFTWARDS ARROW-TAIL 637 ⤜ ⤛ U+291C, U+291B RIGHT/LEFTWARDS DOUBLE ARROW-TAIL 638 ⤞ ⤝ U+291E, U+291D RIGHT/LEFTWARDS ARROW TO BLACK DIAMOND 639 ⤠ ⤟ U+2920, U+291F RIGHT/LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND 640 ⤳ ⬿ U+2933, U+2B3F WAVE ARROW POINTING DIRECTLY RIGHT/LEFT 641 ⤷ ⤶ U+2937, U+2936 ARROW POINTING DOWNWARDS THEN CURVING RIGHT/ 642 LEFTWARDS 643 ⥅ ⥆ U+2945, U+2946 RIGHT/LEFTWARDS ARROW WITH PLUS BELOW 644 ⥇ ⬾ U+2947, U+2B3E RIGHT/LEFTWARDS ARROW THROUGH X 645 ⥓ ⥒ U+2953, U+2952 RIGHT/LEFTWARDS HARPOON WITH BARB UP TO BAR 646 ⥗ ⥖ U+2957, U+2956 RIGHT/LEFTWARDS HARPOON WITH BARB DOWN TO BAR 647 ⥛ ⥚ U+295B, U+295A RIGHT/LEFTWARDS HARPOON WITH BARB UP FROM BAR 648 ⥟ ⥞ U+295F, U+295E RIGHT/LEFTWARDS HARPOON WITH BARB DOWN FROM BAR 649 ⥤ ⥢ U+2964, U+2962 RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE 650 RIGHT/LEFTWARDS HARPOON WITH BARB DOWN 651 ⥬ ⥪ U+296C, U+296A RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE LONG 652 DASH 653 ⥭ ⥫ U+296D, U+296B RIGHT/LEFTWARDS HARPOON WITH BARB DOWN BELOW 654 LONG DASH 655 ⥱ ⭀ U+2971, U+2B40 EQUALS SIGN ABOVE RIGHT/LEFTWARDS ARROW 656 ⥲ ⭁ U+2972, U+2B41 TILDE OPERATOR ABOVE RIGHTWARDS ARROW, REVERSE 657 TILDE OPERATOR ABOVE LEFTWARDS ARROW 658 ⥴ ⭋ U+2974, U+2B4B RIGHTWARDS ARROW ABOVE TILDE OPERATOR, 659 LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 660 ⥵ ⭂ U+2975, U+2B42 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO, 661 LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO 662 ⥹ ⥻ U+2979, U+297B SUBSET/SUPERSET ABOVE RIGHT/LEFTWARDS ARROW 663 ⦃ ⦄ U+2983, U+2984 LEFT/RIGHT WHITE CURLY BRACKET 664 ⦅ ⦆ U+2985, U+2986 LEFT/RIGHT WHITE PARENTHESIS 665 ⦇ ⦈ U+2987, U+2988 Z NOTATION LEFT/RIGHT IMAGE BRACKET 666 ⦉ ⦊ U+2989, U+298A Z NOTATION LEFT/RIGHT BINDING BRACKET 667 ⦋ ⦌ U+298B, U+298C LEFT/RIGHT SQUARE BRACKET WITH UNDERBAR 668 ⦍ ⦐ U+298D, U+2990 LEFT/RIGHT SQUARE BRACKET WITH TICK IN TOP 669 CORNER 670 ⦏ ⦎ U+298F, U+298E LEFT/RIGHT SQUARE BRACKET WITH TICK IN BOTTOM 671 CORNER 672 ⦑ ⦒ U+2991, U+2992 LEFT/RIGHT ANGLE BRACKET WITH DOT 673 ⦓ ⦔ U+2993, U+2994 LEFT/RIGHT ARC LESS-THAN/GREATER-THAN BRACKET 674 ⦕ ⦖ U+2995, U+2996 DOUBLE LEFT/RIGHT ARC GREATER-THAN/LESS-THAN 675 BRACKET 676 ⦗ ⦘ U+2997, U+2998 LEFT/RIGHT BLACK TORTOISE SHELL BRACKET 677 ⦨ ⦩ U+29A8, U+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW 678 POINTING UP AND RIGHT/LEFT 679 ⦪ ⦫ U+29AA, U+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW 680 POINTING DOWN AND RIGHT/LEFT 681 ⦳ ⦴ U+29B3, U+29B4 EMPTY SET WITH RIGHT/LEFT ARROW ABOVE 682 ⧀ ⧁ U+29C0, U+29C1 CIRCLED LESS-THAN/GREATER-THAN 683 ⧘ ⧙ U+29D8, U+29D9 LEFT/RIGHT WIGGLY FENCE 684 ⧚ ⧛ U+29DA, U+29DB LEFT/RIGHT DOUBLE WIGGLY FENCE 685 ⧼ ⧽ U+29FC, U+29FD LEFT/RIGHT-POINTING CURVED ANGLE BRACKET 686 ⩹ ⩺ U+2A79, U+2A7A LESS-THAN/GREATER-THAN WITH CIRCLE INSIDE 687 ⩻ ⩼ U+2A7B, U+2A7C LESS-THAN/GREATER-THAN WITH QUESTION MARK ABOVE 688 ⩽ ⩾ U+2A7D, U+2A7E LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO 689 ⩿ ⪀ U+2A7F, U+2A80 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH 690 DOT INSIDE 691 ⪁ ⪂ U+2A81, U+2A82 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH 692 DOT ABOVE 693 ⪃ ⪄ U+2A83, U+2A84 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH 694 DOT ABOVE RIGHT/LEFT 695 ⪅ ⪆ U+2A85, U+2A86 LESS-THAN/GREATER-THAN OR APPROXIMATE 696 ⪇ ⪈ U+2A87, U+2A88 LESS-THAN/GREATER-THAN AND SINGLE-LINE NOT 697 EQUAL TO 698 ⪉ ⪊ U+2A89, U+2A8A LESS-THAN/GREATER-THAN AND NOT APPROXIMATE 699 ⪍ ⪎ U+2A8D, U+2A8E LESS-THAN/GREATER-THAN ABOVE SIMILAR OR EQUAL 700 ⪕ ⪖ U+2A95, U+2A96 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN 701 ⪗ ⪘ U+2A97, U+2A98 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN WITH 702 DOT INSIDE 703 ⪙ ⪚ U+2A99, U+2A9A DOUBLE-LINE EQUAL TO OR LESS-THAN/GREATER-THAN 704 ⪛ ⪜ U+2A9B, U+2A9C DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/ 705 GREATER-THAN 706 ⪝ ⪞ U+2A9D, U+2A9E SIMILAR OR LESS-THAN/GREATER-THAN 707 ⪟ ⪠ U+2A9F, U+2AA0 SIMILAR ABOVE LESS-THAN/GREATER-THAN ABOVE 708 EQUALS SIGN 709 ⪡ ⪢ U+2AA1, U+2AA2 DOUBLE NESTED LESS-THAN/GREATER-THAN 710 ⪦ ⪧ U+2AA6, U+2AA7 LESS-THAN/GREATER-THAN CLOSED BY CURVE 711 ⪨ ⪩ U+2AA8, U+2AA9 LESS-THAN/GREATER-THAN CLOSED BY CURVE ABOVE 712 SLANTED EQUAL 713 ⪪ ⪫ U+2AAA, U+2AAB SMALLER THAN/LARGER THAN 714 ⪬ ⪭ U+2AAC, U+2AAD SMALLER THAN/LARGER THAN OR EQUAL TO 715 ⪯ ⪰ U+2AAF, U+2AB0 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN 716 ⪱ ⪲ U+2AB1, U+2AB2 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO 717 ⪳ ⪴ U+2AB3, U+2AB4 PRECEDES/SUCCEEDS ABOVE EQUALS SIGN 718 ⪵ ⪶ U+2AB5, U+2AB6 PRECEDES/SUCCEEDS ABOVE NOT EQUAL TO 719 ⪷ ⪸ U+2AB7, U+2AB8 PRECEDES/SUCCEEDS ABOVE ALMOST EQUAL TO 720 ⪹ ⪺ U+2AB9, U+2ABA PRECEDES/SUCCEEDS ABOVE NOT ALMOST EQUAL TO 721 ⪻ ⪼ U+2ABB, U+2ABC DOUBLE PRECEDES/SUCCEEDS 722 ⪽ ⪾ U+2ABD, U+2ABE SUBSET/SUPERSET WITH DOT 723 ⪿ ⫀ U+2ABF, U+2AC0 SUBSET/SUPERSET WITH PLUS SIGN BELOW 724 ⫁ ⫂ U+2AC1, U+2AC2 SUBSET/SUPERSET WITH MULTIPLICATION SIGN BELOW 725 ⫃ ⫄ U+2AC3, U+2AC4 SUBSET/SUPERSET OF OR EQUAL TO WITH DOT ABOVE 726 ⫅ ⫆ U+2AC5, U+2AC6 SUBSET/SUPERSET OF ABOVE EQUALS SIGN 727 ⫇ ⫈ U+2AC7, U+2AC8 SUBSET/SUPERSET OF ABOVE TILDE OPERATOR 728 ⫉ ⫊ U+2AC9, U+2ACA SUBSET/SUPERSET OF ABOVE ALMOST EQUAL TO 729 ⫋ ⫌ U+2ACB, U+2ACC SUBSET/SUPERSET OF ABOVE NOT EQUAL TO 730 ⫏ ⫐ U+2ACF, U+2AD0 CLOSED SUBSET/SUPERSET 731 ⫑ ⫒ U+2AD1, U+2AD2 CLOSED SUBSET/SUPERSET OR EQUAL TO 732 ⫕ ⫖ U+2AD5, U+2AD6 SUBSET/SUPERSET ABOVE SUBSET/SUPERSET 733 ⫥ ⊫ U+2AE5, U+22AB DOUBLE VERTICAL BAR DOUBLE LEFT/RIGHT TURNSTILE 734 ⫷ ⫸ U+2AF7, U+2AF8 TRIPLE NESTED LESS-THAN/GREATER-THAN 735 ⫹ ⫺ U+2AF9, U+2AFA DOUBLE-LINE SLANTED LESS-THAN/GREATER-THAN OR 736 EQUAL TO 737 ⭆ ⭅ U+2B46, U+2B45 RIGHT/LEFTWARDS QUADRUPLE ARROW 738 ⭇ ⭉ U+2B47, U+2B49 REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW, 739 TILDE OPERATOR ABOVE LEFTWARDS ARROW 740 ⭈ ⭊ U+2B48, U+2B4A RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL 741 TO, LEFTWARDS ARROW ABOVE ALMOST EQUAL TO 742 ⭌ ⥳ U+2B4C, U+2973 RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR, 743 LEFTWARDS ARROW ABOVE TILDE OPERATOR 744 ⭢ ⭠ U+2B62, U+2B60 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW 745 ⭬ ⭪ U+2B6C, U+2B6A RIGHT/LEFTWARDS TRIANGLE-HEADED DASHED ARROW 746 ⭲ ⭰ U+2B72, U+2B70 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW TO BAR 747 ⭼ ⭺ U+2B7C, U+2B7A RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH 748 DOUBLE VERTICAL STROKE 749 ⮆ ⮄ U+2B86, U+2B84 RIGHT/LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS 750 ⮊ ⮈ U+2B8A, U+2B88 RIGHT/LEFTWARDS BLACK CIRCLED WHITE ARROW 751 ⮕ ⬅ U+2B95, U+2B05 RIGHT/LEFTWARDS BLACK ARROW 752 ⮚ ⮘ U+2B9A, U+2B98 THREE-D TOP-LIGHTED RIGHT/LEFTWARDS EQUILATERAL 753 ARROWHEAD 754 ⮞ ⮜ U+2B9E, U+2B9C BLACK RIGHT/LEFTWARDS EQUILATERAL ARROWHEAD 755 ⮡ ⮠ U+2BA1, U+2BA0 DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP 756 RIGHT/LEFTWARDS 757 ⮣ ⮢ U+2BA3, U+2BA2 UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP 758 RIGHT/LEFTWARDS 759 ⮩ ⮨ U+2BA9, U+2BA8 BLACK CURVED DOWNWARDS AND RIGHT/LEFTWARDS ARROW 760 ⮫ ⮪ U+2BAB, U+2BAA BLACK CURVED UPWARDS AND RIGHT/LEFTWARDS ARROW 761 ⮱ ⮰ U+2BB1, U+2BB0 RIBBON ARROW DOWN RIGHT/LEFT 762 ⮳ ⮲ U+2BB3, U+2BB2 RIBBON ARROW UP RIGHT/LEFT 763 ⯮ ⯬ U+2BEE, U+2BEC RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE 764 ARROWHEADS 765 ⸂ ⸃ U+2E02, U+2E03 LEFT/RIGHT SUBSTITUTION BRACKET 766 ⸃ ⸂ U+2E03, U+2E02 RIGHT/LEFT SUBSTITUTION BRACKET 767 ⸄ ⸅ U+2E04, U+2E05 LEFT/RIGHT DOTTED SUBSTITUTION BRACKET 768 ⸅ ⸄ U+2E05, U+2E04 RIGHT/LEFT DOTTED SUBSTITUTION BRACKET 769 ⸉ ⸊ U+2E09, U+2E0A LEFT/RIGHT TRANSPOSITION BRACKET 770 ⸊ ⸉ U+2E0A, U+2E09 RIGHT/LEFT TRANSPOSITION BRACKET 771 ⸌ ⸍ U+2E0C, U+2E0D LEFT/RIGHT RAISED OMISSION BRACKET 772 ⸍ ⸌ U+2E0D, U+2E0C RIGHT/LEFT RAISED OMISSION BRACKET 773 ⸑ ⸐ U+2E11, U+2E10 REVERSED FORKED PARAGRAPHOS, FORKED PARAGRAPHOS 774 ⸜ ⸝ U+2E1C, U+2E1D LEFT/RIGHT LOW PARAPHRASE BRACKET 775 ⸝ ⸜ U+2E1D, U+2E1C RIGHT/LEFT LOW PARAPHRASE BRACKET 776 ⸠ ⸡ U+2E20, U+2E21 LEFT/RIGHT VERTICAL BAR WITH QUILL 777 ⸡ ⸠ U+2E21, U+2E20 RIGHT/LEFT VERTICAL BAR WITH QUILL 778 ⸢ ⸣ U+2E22, U+2E23 TOP LEFT/RIGHT HALF BRACKET 779 ⸤ ⸥ U+2E24, U+2E25 BOTTOM LEFT/RIGHT HALF BRACKET 780 ⸦ ⸧ U+2E26, U+2E27 LEFT/RIGHT SIDEWAYS U BRACKET 781 ⸨ ⸩ U+2E28, U+2E29 LEFT/RIGHT DOUBLE PARENTHESIS 782 ⸶ ⸷ U+2E36, U+2E37 DAGGER WITH LEFT/RIGHT GUARD 783 ⹂ „ U+2E42, U+201E DOUBLE LOW-REVERSED-9 QUOTATION MARK, DOUBLE 784 LOW-9 QUOTATION MARK 785 ⹕ ⹖ U+2E55, U+2E56 LEFT/RIGHT SQUARE BRACKET WITH STROKE 786 ⹗ ⹘ U+2E57, U+2E58 LEFT/RIGHT SQUARE BRACKET WITH DOUBLE STROKE 787 ⹙ ⹚ U+2E59, U+2E5A TOP HALF LEFT/RIGHT PARENTHESIS 788 ⹛ ⹜ U+2E5B, U+2E5C BOTTOM HALF LEFT/RIGHT PARENTHESIS 789 〈 〉 U+3008, U+3009 LEFT/RIGHT ANGLE BRACKET 790 《 》 U+300A, U+300B LEFT/RIGHT DOUBLE ANGLE BRACKET 791 「 」 U+300C, U+300D LEFT/RIGHT CORNER BRACKET 792 『 』 U+300E, U+300F LEFT/RIGHT WHITE CORNER BRACKET 793 【 】 U+3010, U+3011 LEFT/RIGHT BLACK LENTICULAR BRACKET 794 〔 〕 U+3014, U+3015 LEFT/RIGHT TORTOISE SHELL BRACKET 795 〖 〗 U+3016, U+3017 LEFT/RIGHT WHITE LENTICULAR BRACKET 796 〘 〙 U+3018, U+3019 LEFT/RIGHT WHITE TORTOISE SHELL BRACKET 797 〚 〛 U+301A, U+301B LEFT/RIGHT WHITE SQUARE BRACKET 798 〝 〞 U+301D, U+301E REVERSED DOUBLE PRIME QUOTATION MARK, DOUBLE 799 PRIME QUOTATION MARK 800 ꧁ ꧂ U+A9C1, U+A9C2 JAVANESE LEFT/RIGHT RERENGGAN 801 ﴾ ﴿ U+FD3E, U+FD3F ORNATE LEFT/RIGHT PARENTHESIS 802 ﹙ ﹚ U+FE59, U+FE5A SMALL LEFT/RIGHT PARENTHESIS 803 ﹛ ﹜ U+FE5B, U+FE5C SMALL LEFT/RIGHT CURLY BRACKET 804 ﹝ ﹞ U+FE5D, U+FE5E SMALL LEFT/RIGHT TORTOISE SHELL BRACKET 805 ﹤ ﹥ U+FE64, U+FE65 SMALL LESS-THAN/GREATER-THAN SIGN 806 ( ) U+FF08, U+FF09 FULLWIDTH LEFT/RIGHT PARENTHESIS 807 < > U+FF1C, U+FF1E FULLWIDTH LESS-THAN/GREATER-THAN SIGN 808 [ ] U+FF3B, U+FF3D FULLWIDTH LEFT/RIGHT SQUARE BRACKET 809 { } U+FF5B, U+FF5D FULLWIDTH LEFT/RIGHT CURLY BRACKET 810 ⦅ ⦆ U+FF5F, U+FF60 FULLWIDTH LEFT/RIGHT WHITE PARENTHESIS 811 「 」 U+FF62, U+FF63 HALFWIDTH LEFT/RIGHT CORNER BRACKET 812 → ← U+FFEB, U+FFE9 HALFWIDTH RIGHT/LEFTWARDS ARROW 813 U+1D103, U+1D102 MUSICAL SYMBOL REVERSE FINAL BARLINE, MUSICAL 814 SYMBOL FINAL BARLINE 815 U+1D106, U+1D107 MUSICAL SYMBOL LEFT/RIGHT REPEAT SIGN 816 U+1F449, U+1F448 WHITE RIGHT/LEFT POINTING BACKHAND INDEX 817 U+1F508, U+1F568 SPEAKER, RIGHT SPEAKER 818 U+1F509, U+1F569 SPEAKER WITH ONE SOUND WAVE, RIGHT SPEAKER WITH 819 ONE SOUND WAVE 820 U+1F50A, U+1F56A SPEAKER WITH THREE SOUND WAVES, RIGHT SPEAKER 821 WITH THREE SOUND WAVES 822 U+1F57B, U+1F57D LEFT/RIGHT HAND TELEPHONE RECEIVER 823 U+1F599, U+1F598 SIDEWAYS WHITE RIGHT/LEFT POINTING INDEX 824 U+1F59B, U+1F59A SIDEWAYS BLACK RIGHT/LEFT POINTING INDEX 825 U+1F59D, U+1F59C BLACK RIGHT/LEFT POINTING BACKHAND INDEX 826 U+1F5E6, U+1F5E7 THREE RAYS LEFT/RIGHT 827 U+1F802, U+1F800 RIGHT/LEFTWARDS ARROW WITH SMALL TRIANGLE 828 ARROWHEAD 829 U+1F806, U+1F804 RIGHT/LEFTWARDS ARROW WITH MEDIUM TRIANGLE 830 ARROWHEAD 831 U+1F80A, U+1F808 RIGHT/LEFTWARDS ARROW WITH LARGE TRIANGLE 832 ARROWHEAD 833 U+1F812, U+1F810 RIGHT/LEFTWARDS ARROW WITH SMALL EQUILATERAL 834 ARROWHEAD 835 U+1F816, U+1F814 RIGHT/LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD 836 U+1F81A, U+1F818 HEAVY RIGHT/LEFTWARDS ARROW WITH EQUILATERAL 837 ARROWHEAD 838 U+1F81E, U+1F81C HEAVY RIGHT/LEFTWARDS ARROW WITH LARGE 839 EQUILATERAL ARROWHEAD 840 U+1F822, U+1F820 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH 841 NARROW SHAFT 842 U+1F826, U+1F824 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH 843 MEDIUM SHAFT 844 U+1F82A, U+1F828 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD 845 SHAFT 846 U+1F82E, U+1F82C RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH 847 HEAVY SHAFT 848 U+1F832, U+1F830 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY 849 HEAVY SHAFT 850 U+1F836, U+1F834 RIGHT/LEFTWARDS FINGER-POST ARROW 851 U+1F83A, U+1F838 RIGHT/LEFTWARDS SQUARED ARROW 852 U+1F83E, U+1F83C RIGHT/LEFTWARDS COMPRESSED ARROW 853 U+1F842, U+1F840 RIGHT/LEFTWARDS HEAVY COMPRESSED ARROW 854 U+1F846, U+1F844 RIGHT/LEFTWARDS HEAVY ARROW 855 U+1F852, U+1F850 RIGHT/LEFTWARDS SANS-SERIF ARROW 856 U+1F862, U+1F860 WIDE-HEADED RIGHT/LEFTWARDS LIGHT BARB ARROW 857 U+1F86A, U+1F868 WIDE-HEADED RIGHT/LEFTWARDS BARB ARROW 858 U+1F872, U+1F870 WIDE-HEADED RIGHT/LEFTWARDS MEDIUM BARB ARROW 859 U+1F87A, U+1F878 WIDE-HEADED RIGHT/LEFTWARDS HEAVY BARB ARROW 860 U+1F882, U+1F880 WIDE-HEADED RIGHT/LEFTWARDS VERY HEAVY BARB 861 ARROW 862 U+1F892, U+1F890 RIGHT/LEFTWARDS TRIANGLE ARROWHEAD 863 U+1F896, U+1F894 RIGHT/LEFTWARDS WHITE ARROW WITHIN TRIANGLE 864 ARROWHEAD 865 U+1F89A, U+1F898 RIGHT/LEFTWARDS ARROW WITH NOTCHED TAIL 866 U+1F8A1, U+1F8A0 RIGHTWARDS BOTTOM SHADED WHITE ARROW, 867 LEFTWARDS BOTTOM-SHADED WHITE ARROW 868 U+1F8A3, U+1F8A2 RIGHT/LEFTWARDS TOP SHADED WHITE ARROW 869 U+1F8A5, U+1F8A6 RIGHT/LEFTWARDS RIGHT-SHADED WHITE ARROW 870 U+1F8A7, U+1F8A4 RIGHT/LEFTWARDS LEFT-SHADED WHITE ARROW 871 U+1F8A9, U+1F8A8 RIGHT/LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW 872 U+1F8AB, U+1F8AA RIGHT/LEFTWARDS FRONT-TILTED SHADOWED WHITE 873 ARROW 874 875=head2 The 'module_true' feature 876 877This feature removes the need to return a true value at the end of a module 878loaded with C<require> or C<use>. Any errors during compilation will cause 879failures, but reaching the end of the module when this feature is in effect 880will prevent C<perl> from throwing an exception that the module "did not return 881a true value". 882 883=head2 The 'class' feature 884 885B<WARNING>: This feature is still experimental and the implementation may 886change or be removed in future versions of Perl. For this reason, Perl will 887warn when you use the feature, unless you have explicitly disabled the warning: 888 889 no warnings "experimental::class"; 890 891This feature enables the C<class> block syntax and other associated keywords 892which implement the "new" object system, previously codenamed "Corinna". 893 894=head1 FEATURE BUNDLES 895 896It's possible to load multiple features together, using 897a I<feature bundle>. The name of a feature bundle is prefixed with 898a colon, to distinguish it from an actual feature. 899 900 use feature ":5.10"; 901 902The following feature bundles are available: 903 904 bundle features included 905 --------- ----------------- 906 :default indirect multidimensional 907 bareword_filehandles 908 909 :5.10 bareword_filehandles indirect 910 multidimensional say state switch 911 912 :5.12 bareword_filehandles indirect 913 multidimensional say state switch 914 unicode_strings 915 916 :5.14 bareword_filehandles indirect 917 multidimensional say state switch 918 unicode_strings 919 920 :5.16 bareword_filehandles current_sub evalbytes 921 fc indirect multidimensional say state 922 switch unicode_eval unicode_strings 923 924 :5.18 bareword_filehandles current_sub evalbytes 925 fc indirect multidimensional say state 926 switch unicode_eval unicode_strings 927 928 :5.20 bareword_filehandles current_sub evalbytes 929 fc indirect multidimensional say state 930 switch unicode_eval unicode_strings 931 932 :5.22 bareword_filehandles current_sub evalbytes 933 fc indirect multidimensional say state 934 switch unicode_eval unicode_strings 935 936 :5.24 bareword_filehandles current_sub evalbytes 937 fc indirect multidimensional postderef_qq 938 say state switch unicode_eval 939 unicode_strings 940 941 :5.26 bareword_filehandles current_sub evalbytes 942 fc indirect multidimensional postderef_qq 943 say state switch unicode_eval 944 unicode_strings 945 946 :5.28 bareword_filehandles bitwise current_sub 947 evalbytes fc indirect multidimensional 948 postderef_qq say state switch unicode_eval 949 unicode_strings 950 951 :5.30 bareword_filehandles bitwise current_sub 952 evalbytes fc indirect multidimensional 953 postderef_qq say state switch unicode_eval 954 unicode_strings 955 956 :5.32 bareword_filehandles bitwise current_sub 957 evalbytes fc indirect multidimensional 958 postderef_qq say state switch unicode_eval 959 unicode_strings 960 961 :5.34 bareword_filehandles bitwise current_sub 962 evalbytes fc indirect multidimensional 963 postderef_qq say state switch unicode_eval 964 unicode_strings 965 966 :5.36 bareword_filehandles bitwise current_sub 967 evalbytes fc isa postderef_qq say signatures 968 state unicode_eval unicode_strings 969 970 :5.38 bitwise current_sub evalbytes fc isa 971 module_true postderef_qq say signatures 972 state unicode_eval unicode_strings 973 974The C<:default> bundle represents the feature set that is enabled before 975any C<use feature> or C<no feature> declaration. 976 977Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has 978no effect. Feature bundles are guaranteed to be the same for all sub-versions. 979 980 use feature ":5.14.0"; # same as ":5.14" 981 use feature ":5.14.1"; # same as ":5.14" 982 983=head1 IMPLICIT LOADING 984 985Instead of loading feature bundles by name, it is easier to let Perl do 986implicit loading of a feature bundle for you. 987 988There are two ways to load the C<feature> pragma implicitly: 989 990=over 4 991 992=item * 993 994By using the C<-E> switch on the Perl command-line instead of C<-e>. 995That will enable the feature bundle for that version of Perl in the 996main compilation unit (that is, the one-liner that follows C<-E>). 997 998=item * 999 1000By explicitly requiring a minimum Perl version number for your program, with 1001the C<use VERSION> construct. That is, 1002 1003 use v5.36.0; 1004 1005will do an implicit 1006 1007 no feature ':all'; 1008 use feature ':5.36'; 1009 1010and so on. Note how the trailing sub-version 1011is automatically stripped from the 1012version. 1013 1014But to avoid portability warnings (see L<perlfunc/use>), you may prefer: 1015 1016 use 5.036; 1017 1018with the same effect. 1019 1020If the required version is older than Perl 5.10, the ":default" feature 1021bundle is automatically loaded instead. 1022 1023Unlike C<use feature ":5.12">, saying C<use v5.12> (or any higher version) 1024also does the equivalent of C<use strict>; see L<perlfunc/use> for details. 1025 1026=back 1027 1028=head1 CHECKING FEATURES 1029 1030C<feature> provides some simple APIs to check which features are enabled. 1031 1032These functions cannot be imported and must be called by their fully 1033qualified names. If you don't otherwise need to set a feature you will 1034need to ensure C<feature> is loaded with: 1035 1036 use feature (); 1037 1038=over 1039 1040=item feature_enabled($feature) 1041 1042=item feature_enabled($feature, $depth) 1043 1044 package MyStandardEnforcer; 1045 use feature (); 1046 use Carp "croak"; 1047 sub import { 1048 croak "disable indirect!" if feature::feature_enabled("indirect"); 1049 } 1050 1051Test whether a named feature is enabled at a given level in the call 1052stack, returning a true value if it is. C<$depth> defaults to 1, 1053which checks the scope that called the scope calling 1054feature::feature_enabled(). 1055 1056croaks for an unknown feature name. 1057 1058=item features_enabled() 1059 1060=item features_enabled($depth) 1061 1062 package ReportEnabledFeatures; 1063 use feature "say"; 1064 sub import { 1065 say STDERR join " ", feature::features_enabled(); 1066 } 1067 1068Returns a list of the features enabled at a given level in the call 1069stack. C<$depth> defaults to 1, which checks the scope that called 1070the scope calling feature::features_enabled(). 1071 1072=item feature_bundle() 1073 1074=item feature_bundle($depth) 1075 1076Returns the feature bundle, if any, selected at a given level in the 1077call stack. C<$depth> defaults to 1, which checks the scope that called 1078the scope calling feature::feature_bundle(). 1079 1080Returns an undefined value if no feature bundle is selected in the 1081scope. 1082 1083The bundle name returned will be for the earliest bundle matching the 1084selected bundle, so: 1085 1086 use feature (); 1087 use v5.12; 1088 BEGIN { print feature::feature_bundle(0); } 1089 1090will print C<5.11>. 1091 1092This returns internal state, at this point C<use v5.12;> sets the 1093feature bundle, but C< use feature ":5.12"; > does not set the feature 1094bundle. This may change in a future release of perl. 1095 1096=back 1097 1098=cut 1099 1100sub import { 1101 shift; 1102 1103 if (!@_) { 1104 croak("No features specified"); 1105 } 1106 1107 __common(1, @_); 1108} 1109 1110sub unimport { 1111 shift; 1112 1113 # A bare C<no feature> should reset to the default bundle 1114 if (!@_) { 1115 $^H &= ~($hint_uni8bit|$hint_mask); 1116 return; 1117 } 1118 1119 __common(0, @_); 1120} 1121 1122 1123sub __common { 1124 my $import = shift; 1125 my $bundle_number = $^H & $hint_mask; 1126 my $features = $bundle_number != $hint_mask 1127 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}; 1128 if ($features) { 1129 # Features are enabled implicitly via bundle hints. 1130 # Delete any keys that may be left over from last time. 1131 delete @^H{ values(%feature) }; 1132 $^H |= $hint_mask; 1133 for (@$features) { 1134 $^H{$feature{$_}} = 1; 1135 $^H |= $hint_uni8bit if $_ eq 'unicode_strings'; 1136 } 1137 } 1138 while (@_) { 1139 my $name = shift; 1140 if (substr($name, 0, 1) eq ":") { 1141 my $v = substr($name, 1); 1142 if (!exists $feature_bundle{$v}) { 1143 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/; 1144 if (!exists $feature_bundle{$v}) { 1145 unknown_feature_bundle(substr($name, 1)); 1146 } 1147 } 1148 unshift @_, @{$feature_bundle{$v}}; 1149 next; 1150 } 1151 if (!exists $feature{$name}) { 1152 if (exists $noops{$name}) { 1153 next; 1154 } 1155 if (!$import && exists $removed{$name}) { 1156 next; 1157 } 1158 unknown_feature($name); 1159 } 1160 if ($import) { 1161 $^H{$feature{$name}} = 1; 1162 $^H |= $hint_uni8bit if $name eq 'unicode_strings'; 1163 } else { 1164 delete $^H{$feature{$name}}; 1165 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings'; 1166 } 1167 } 1168} 1169 1170sub unknown_feature { 1171 my $feature = shift; 1172 croak(sprintf('Feature "%s" is not supported by Perl %vd', 1173 $feature, $^V)); 1174} 1175 1176sub unknown_feature_bundle { 1177 my $feature = shift; 1178 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd', 1179 $feature, $^V)); 1180} 1181 1182sub croak { 1183 require Carp; 1184 Carp::croak(@_); 1185} 1186 1187sub features_enabled { 1188 my ($depth) = @_; 1189 1190 $depth //= 1; 1191 my @frame = caller($depth+1) 1192 or return; 1193 my ($hints, $hinthash) = @frame[8, 10]; 1194 1195 my $bundle_number = $hints & $hint_mask; 1196 if ($bundle_number != $hint_mask) { 1197 return $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}->@*; 1198 } 1199 else { 1200 my @features; 1201 for my $feature (sort keys %feature) { 1202 if ($hinthash->{$feature{$feature}}) { 1203 push @features, $feature; 1204 } 1205 } 1206 return @features; 1207 } 1208} 1209 1210sub feature_enabled { 1211 my ($feature, $depth) = @_; 1212 1213 $depth //= 1; 1214 my @frame = caller($depth+1) 1215 or return; 1216 my ($hints, $hinthash) = @frame[8, 10]; 1217 1218 my $hint_feature = $feature{$feature} 1219 or croak "Unknown feature $feature"; 1220 my $bundle_number = $hints & $hint_mask; 1221 if ($bundle_number != $hint_mask) { 1222 my $bundle = $hint_bundles[$bundle_number >> $hint_shift]; 1223 for my $bundle_feature ($feature_bundle{$bundle}->@*) { 1224 return 1 if $bundle_feature eq $feature; 1225 } 1226 return 0; 1227 } 1228 else { 1229 return $hinthash->{$hint_feature} // 0; 1230 } 1231} 1232 1233sub feature_bundle { 1234 my $depth = shift; 1235 1236 $depth //= 1; 1237 my @frame = caller($depth+1) 1238 or return; 1239 my $bundle_number = $frame[8] & $hint_mask; 1240 if ($bundle_number != $hint_mask) { 1241 return $hint_bundles[$bundle_number >> $hint_shift]; 1242 } 1243 else { 1244 return undef; 1245 } 1246} 1247 12481; 1249 1250# ex: set ro ft=perl: 1251