xref: /openbsd/gnu/usr.bin/perl/lib/feature.pm (revision e0680481)
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