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