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