xref: /openbsd/gnu/usr.bin/perl/lib/feature.pm (revision e0680481)
1*e0680481Safresh1# -*- mode: Perl; buffer-read-only: t -*-
2898184e3Ssthen# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
3898184e3Ssthen# This file is built by regen/feature.pl.
4898184e3Ssthen# Any changes made here will be lost!
5898184e3Ssthen
6850e2753Smillertpackage feature;
7*e0680481Safresh1our $VERSION = '1.82';
8850e2753Smillert
9898184e3Ssthenour %feature = (
10898184e3Ssthen    fc                      => 'feature_fc',
1156d68f1eSafresh1    isa                     => 'feature_isa',
12898184e3Ssthen    say                     => 'feature_say',
13eac174f2Safresh1    try                     => 'feature_try',
14*e0680481Safresh1    class                   => 'feature_class',
15eac174f2Safresh1    defer                   => 'feature_defer',
16898184e3Ssthen    state                   => 'feature_state',
17850e2753Smillert    switch                  => 'feature_switch',
18b8851fccSafresh1    bitwise                 => 'feature_bitwise',
1956d68f1eSafresh1    indirect                => 'feature_indirect',
20898184e3Ssthen    evalbytes               => 'feature_evalbytes',
216fb12b70Safresh1    signatures              => 'feature_signatures',
22898184e3Ssthen    current_sub             => 'feature___SUB__',
23*e0680481Safresh1    module_true             => 'feature_module_true',
24b8851fccSafresh1    refaliasing             => 'feature_refaliasing',
256fb12b70Safresh1    postderef_qq            => 'feature_postderef_qq',
26898184e3Ssthen    unicode_eval            => 'feature_unieval',
279f11ffb7Safresh1    declared_refs           => 'feature_myref',
28898184e3Ssthen    unicode_strings         => 'feature_unicode',
29eac174f2Safresh1    multidimensional        => 'feature_multidimensional',
30eac174f2Safresh1    bareword_filehandles    => 'feature_bareword_filehandles',
31eac174f2Safresh1    extra_paired_delimiters => 'feature_more_delims',
32850e2753Smillert);
33850e2753Smillert
34898184e3Ssthenour %feature_bundle = (
35eac174f2Safresh1    "5.10"    => [qw(bareword_filehandles indirect multidimensional say state switch)],
36eac174f2Safresh1    "5.11"    => [qw(bareword_filehandles indirect multidimensional say state switch unicode_strings)],
37eac174f2Safresh1    "5.15"    => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)],
38eac174f2Safresh1    "5.23"    => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
39eac174f2Safresh1    "5.27"    => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
40eac174f2Safresh1    "5.35"    => [qw(bareword_filehandles bitwise current_sub evalbytes fc isa postderef_qq say signatures state unicode_eval unicode_strings)],
41*e0680481Safresh1    "5.37"    => [qw(bitwise current_sub evalbytes fc isa module_true postderef_qq say signatures state unicode_eval unicode_strings)],
42*e0680481Safresh1    "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)],
43eac174f2Safresh1    "default" => [qw(bareword_filehandles indirect multidimensional)],
44898184e3Ssthen);
45898184e3Ssthen
46898184e3Ssthen$feature_bundle{"5.12"} = $feature_bundle{"5.11"};
47898184e3Ssthen$feature_bundle{"5.13"} = $feature_bundle{"5.11"};
48898184e3Ssthen$feature_bundle{"5.14"} = $feature_bundle{"5.11"};
49898184e3Ssthen$feature_bundle{"5.16"} = $feature_bundle{"5.15"};
5091f110e0Safresh1$feature_bundle{"5.17"} = $feature_bundle{"5.15"};
5191f110e0Safresh1$feature_bundle{"5.18"} = $feature_bundle{"5.15"};
526fb12b70Safresh1$feature_bundle{"5.19"} = $feature_bundle{"5.15"};
536fb12b70Safresh1$feature_bundle{"5.20"} = $feature_bundle{"5.15"};
54b8851fccSafresh1$feature_bundle{"5.21"} = $feature_bundle{"5.15"};
55b8851fccSafresh1$feature_bundle{"5.22"} = $feature_bundle{"5.15"};
56b8851fccSafresh1$feature_bundle{"5.24"} = $feature_bundle{"5.23"};
579f11ffb7Safresh1$feature_bundle{"5.25"} = $feature_bundle{"5.23"};
589f11ffb7Safresh1$feature_bundle{"5.26"} = $feature_bundle{"5.23"};
599f11ffb7Safresh1$feature_bundle{"5.28"} = $feature_bundle{"5.27"};
60b46d8ef2Safresh1$feature_bundle{"5.29"} = $feature_bundle{"5.27"};
61b46d8ef2Safresh1$feature_bundle{"5.30"} = $feature_bundle{"5.27"};
6256d68f1eSafresh1$feature_bundle{"5.31"} = $feature_bundle{"5.27"};
6356d68f1eSafresh1$feature_bundle{"5.32"} = $feature_bundle{"5.27"};
64eac174f2Safresh1$feature_bundle{"5.33"} = $feature_bundle{"5.27"};
65eac174f2Safresh1$feature_bundle{"5.34"} = $feature_bundle{"5.27"};
66eac174f2Safresh1$feature_bundle{"5.36"} = $feature_bundle{"5.35"};
67*e0680481Safresh1$feature_bundle{"5.38"} = $feature_bundle{"5.37"};
68898184e3Ssthen$feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
699f11ffb7Safresh1my %noops = (
709f11ffb7Safresh1    postderef => 1,
719f11ffb7Safresh1    lexical_subs => 1,
729f11ffb7Safresh1);
73b46d8ef2Safresh1my %removed = (
74b46d8ef2Safresh1    array_base => 1,
75b46d8ef2Safresh1);
76898184e3Ssthen
77898184e3Ssthenour $hint_shift   = 26;
78eac174f2Safresh1our $hint_mask    = 0x3c000000;
79*e0680481Safresh1our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 5.35 5.37 );
80898184e3Ssthen
81b39c5158Smillert# This gets set (for now) in $^H as well as in %^H,
82b39c5158Smillert# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
83b39c5158Smillert# See HINT_UNI_8_BIT in perl.h.
84b39c5158Smillertour $hint_uni8bit = 0x00000800;
85b39c5158Smillert
86850e2753Smillert# TODO:
87850e2753Smillert# - think about versioned features (use feature switch => 2)
88850e2753Smillert
89eac174f2Safresh1=encoding utf8
90eac174f2Safresh1
91850e2753Smillert=head1 NAME
92850e2753Smillert
93b39c5158Smillertfeature - Perl pragma to enable new features
94850e2753Smillert
95850e2753Smillert=head1 SYNOPSIS
96850e2753Smillert
97eac174f2Safresh1    use feature qw(fc say);
98850e2753Smillert
99eac174f2Safresh1    # Without the "use feature" above, this code would not be able to find
100eac174f2Safresh1    # the built-ins "say" or "fc":
101eac174f2Safresh1    say "The case-folded version of $x is: " . fc $x;
102850e2753Smillert
103eac174f2Safresh1
104*e0680481Safresh1    # set features to match the :5.36 bundle, which may turn off or on
105*e0680481Safresh1    # multiple features (see "FEATURE BUNDLES" below)
106*e0680481Safresh1    use feature ':5.36';
107eac174f2Safresh1
108eac174f2Safresh1
109*e0680481Safresh1    # implicitly loads :5.36 feature bundle
110*e0680481Safresh1    use v5.36;
111898184e3Ssthen
112850e2753Smillert=head1 DESCRIPTION
113850e2753Smillert
114850e2753SmillertIt is usually impossible to add new syntax to Perl without breaking
115850e2753Smillertsome existing programs.  This pragma provides a way to minimize that
116b39c5158Smillertrisk. New syntactic constructs, or new semantic meanings to older
117b39c5158Smillertconstructs, can be enabled by C<use feature 'foo'>, and will be parsed
118898184e3Ssthenonly when the appropriate feature pragma is in scope.  (Nevertheless, the
119898184e3SsthenC<CORE::> prefix provides access to all Perl keywords, regardless of this
120898184e3Ssthenpragma.)
121850e2753Smillert
122850e2753Smillert=head2 Lexical effect
123850e2753Smillert
124850e2753SmillertLike other pragmas (C<use strict>, for example), features have a lexical
125850e2753Smillerteffect.  C<use feature qw(foo)> will only make the feature "foo" available
126850e2753Smillertfrom that point to the end of the enclosing block.
127850e2753Smillert
128850e2753Smillert    {
129850e2753Smillert        use feature 'say';
130850e2753Smillert        say "say is available here";
131850e2753Smillert    }
132850e2753Smillert    print "But not here.\n";
133850e2753Smillert
134850e2753Smillert=head2 C<no feature>
135850e2753Smillert
136850e2753SmillertFeatures can also be turned off by using C<no feature "foo">.  This too
137850e2753Smillerthas lexical effect.
138850e2753Smillert
139850e2753Smillert    use feature 'say';
140850e2753Smillert    say "say is available here";
141850e2753Smillert    {
142850e2753Smillert        no feature 'say';
143850e2753Smillert        print "But not here.\n";
144850e2753Smillert    }
145850e2753Smillert    say "Yet it is here.";
146850e2753Smillert
147898184e3SsthenC<no feature> with no features specified will reset to the default group.  To
148898184e3Ssthendisable I<all> features (an unusual request!) use C<no feature ':all'>.
149850e2753Smillert
150898184e3Ssthen=head1 AVAILABLE FEATURES
151850e2753Smillert
152*e0680481Safresh1Read L</"FEATURE BUNDLES"> for the feature cheat sheet summary.
153*e0680481Safresh1
154850e2753Smillert=head2 The 'say' feature
155850e2753Smillert
156eac174f2Safresh1C<use feature 'say'> tells the compiler to enable the Raku-inspired
157850e2753SmillertC<say> function.
158850e2753Smillert
159850e2753SmillertSee L<perlfunc/say> for details.
160850e2753Smillert
161898184e3SsthenThis feature is available starting with Perl 5.10.
162898184e3Ssthen
163898184e3Ssthen=head2 The 'state' feature
164850e2753Smillert
165850e2753SmillertC<use feature 'state'> tells the compiler to enable C<state>
166850e2753Smillertvariables.
167850e2753Smillert
168850e2753SmillertSee L<perlsub/"Persistent Private Variables"> for details.
169850e2753Smillert
170898184e3SsthenThis feature is available starting with Perl 5.10.
171b39c5158Smillert
172898184e3Ssthen=head2 The 'switch' feature
173b39c5158Smillert
174eac174f2Safresh1B<WARNING>: This feature is still experimental and the implementation may
175eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
176eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
177b8851fccSafresh1
178b8851fccSafresh1    no warnings "experimental::smartmatch";
179b8851fccSafresh1
180eac174f2Safresh1C<use feature 'switch'> tells the compiler to enable the Raku
181898184e3Ssthengiven/when construct.
182898184e3Ssthen
183898184e3SsthenSee L<perlsyn/"Switch Statements"> for details.
184898184e3Ssthen
185898184e3SsthenThis feature is available starting with Perl 5.10.
186*e0680481Safresh1It is deprecated starting with Perl 5.38, and using
187*e0680481Safresh1C<given>, C<when> or smartmatch will throw a warning.
188*e0680481Safresh1It will be removed in Perl 5.42.
189898184e3Ssthen
190898184e3Ssthen=head2 The 'unicode_strings' feature
191898184e3Ssthen
1926fb12b70Safresh1C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
193898184e3Ssthenin all string operations executed within its scope (unless they are also
194898184e3Ssthenwithin the scope of either C<use locale> or C<use bytes>).  The same applies
195898184e3Ssthento all regular expressions compiled within the scope, even if executed outside
19691f110e0Safresh1it.  It does not change the internal representation of strings, but only how
19791f110e0Safresh1they are interpreted.
198898184e3Ssthen
199898184e3SsthenC<no feature 'unicode_strings'> tells the compiler to use the traditional
2006fb12b70Safresh1Perl rules wherein the native character set rules is used unless it is
201898184e3Ssthenclear to Perl that Unicode is desired.  This can lead to some surprises
202898184e3Ssthenwhen the behavior suddenly changes.  (See
203898184e3SsthenL<perlunicode/The "Unicode Bug"> for details.)  For this reason, if you are
204898184e3Ssthenpotentially using Unicode in your program, the
205898184e3SsthenC<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
206898184e3Ssthen
207898184e3SsthenThis feature is available starting with Perl 5.12; was almost fully
2089f11ffb7Safresh1implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>;
2099f11ffb7Safresh1was extended further in Perl 5.26 to cover L<the range
2109f11ffb7Safresh1operator|perlop/Range Operators>; and was extended again in Perl 5.28 to
2119f11ffb7Safresh1cover L<special-cased whitespace splitting|perlfunc/split>.
212898184e3Ssthen
213898184e3Ssthen=head2 The 'unicode_eval' and 'evalbytes' features
214898184e3Ssthen
2159f11ffb7Safresh1Together, these two features are intended to replace the legacy string
2169f11ffb7Safresh1C<eval> function, which behaves problematically in some instances.  They are
2179f11ffb7Safresh1available starting with Perl 5.16, and are enabled by default by a
2189f11ffb7Safresh1S<C<use 5.16>> or higher declaration.
219898184e3Ssthen
2209f11ffb7Safresh1C<unicode_eval> changes the behavior of plain string C<eval> to work more
2219f11ffb7Safresh1consistently, especially in the Unicode world.  Certain (mis)behaviors
2229f11ffb7Safresh1couldn't be changed without breaking some things that had come to rely on
2239f11ffb7Safresh1them, so the feature can be enabled and disabled.  Details are at
2249f11ffb7Safresh1L<perlfunc/Under the "unicode_eval" feature>.
225898184e3Ssthen
226eac174f2Safresh1C<evalbytes> is like string C<eval>, but it treats its argument as a byte
227eac174f2Safresh1string. Details are at L<perlfunc/evalbytes EXPR>.  Without a
2289f11ffb7Safresh1S<C<use feature 'evalbytes'>> nor a S<C<use v5.16>> (or higher) declaration in
2299f11ffb7Safresh1the current scope, you can still access it by instead writing
2309f11ffb7Safresh1C<CORE::evalbytes>.
231898184e3Ssthen
232898184e3Ssthen=head2 The 'current_sub' feature
233898184e3Ssthen
234898184e3SsthenThis provides the C<__SUB__> token that returns a reference to the current
235898184e3Ssthensubroutine or C<undef> outside of a subroutine.
236898184e3Ssthen
237898184e3SsthenThis feature is available starting with Perl 5.16.
238898184e3Ssthen
239898184e3Ssthen=head2 The 'array_base' feature
240898184e3Ssthen
241b46d8ef2Safresh1This feature supported the legacy C<$[> variable.  See L<perlvar/$[>.
242b46d8ef2Safresh1It was on by default but disabled under C<use v5.16> (see
243b46d8ef2Safresh1L</IMPLICIT LOADING>, below) and unavailable since perl 5.30.
244898184e3Ssthen
245898184e3SsthenThis feature is available under this name starting with Perl 5.16.  In
246898184e3Ssthenprevious versions, it was simply on all the time, and this pragma knew
247898184e3Ssthennothing about it.
248898184e3Ssthen
249898184e3Ssthen=head2 The 'fc' feature
250898184e3Ssthen
251898184e3SsthenC<use feature 'fc'> tells the compiler to enable the C<fc> function,
252898184e3Ssthenwhich implements Unicode casefolding.
253898184e3Ssthen
254898184e3SsthenSee L<perlfunc/fc> for details.
255898184e3Ssthen
256898184e3SsthenThis feature is available from Perl 5.16 onwards.
257b39c5158Smillert
25891f110e0Safresh1=head2 The 'lexical_subs' feature
25991f110e0Safresh1
2609f11ffb7Safresh1In Perl versions prior to 5.26, this feature enabled
2619f11ffb7Safresh1declaration of subroutines via C<my sub foo>, C<state sub foo>
2629f11ffb7Safresh1and C<our sub foo> syntax.  See L<perlsub/Lexical Subroutines> for details.
2639f11ffb7Safresh1
2649f11ffb7Safresh1This feature is available from Perl 5.18 onwards.  From Perl 5.18 to 5.24,
2659f11ffb7Safresh1it was classed as experimental, and Perl emitted a warning for its
2669f11ffb7Safresh1usage, except when explicitly disabled:
26791f110e0Safresh1
26891f110e0Safresh1  no warnings "experimental::lexical_subs";
26991f110e0Safresh1
2709f11ffb7Safresh1As of Perl 5.26, use of this feature no longer triggers a warning, though
2719f11ffb7Safresh1the C<experimental::lexical_subs> warning category still exists (for
2729f11ffb7Safresh1compatibility with code that disables it).  In addition, this syntax is
2739f11ffb7Safresh1not only no longer experimental, but it is enabled for all Perl code,
2749f11ffb7Safresh1regardless of what feature declarations are in scope.
27591f110e0Safresh1
27652736614Safresh1=head2 The 'postderef' and 'postderef_qq' features
27752736614Safresh1
278b8851fccSafresh1The 'postderef_qq' feature extends the applicability of L<postfix
279*e0680481Safresh1dereference syntax|perlref/Postfix Dereference Syntax> so that
280*e0680481Safresh1postfix array dereference, postfix scalar dereference, and
281*e0680481Safresh1postfix array highest index access are available in double-quotish interpolations.
282*e0680481Safresh1For example, it makes the following two statements equivalent:
283b8851fccSafresh1
284b8851fccSafresh1  my $s = "[@{ $h->{a} }]";
285b8851fccSafresh1  my $s = "[$h->{a}->@*]";
286b8851fccSafresh1
287b8851fccSafresh1This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it
288b8851fccSafresh1was classed as experimental, and Perl emitted a warning for its
289b8851fccSafresh1usage, except when explicitly disabled:
29052736614Safresh1
29152736614Safresh1  no warnings "experimental::postderef";
29252736614Safresh1
293b8851fccSafresh1As of Perl 5.24, use of this feature no longer triggers a warning, though
294b8851fccSafresh1the C<experimental::postderef> warning category still exists (for
295b8851fccSafresh1compatibility with code that disables it).
29652736614Safresh1
297b8851fccSafresh1The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable
298b8851fccSafresh1postfix dereference syntax outside double-quotish interpolations. In those
299b8851fccSafresh1versions, using it triggered the C<experimental::postderef> warning in the
300b8851fccSafresh1same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is
301b8851fccSafresh1not only no longer experimental, but it is enabled for all Perl code,
302b8851fccSafresh1regardless of what feature declarations are in scope.
30352736614Safresh1
3046fb12b70Safresh1=head2 The 'signatures' feature
3056fb12b70Safresh1
306eac174f2Safresh1This enables syntax for declaring subroutine arguments as lexical variables.
307eac174f2Safresh1For example, for this subroutine:
3086fb12b70Safresh1
3096fb12b70Safresh1    sub foo ($left, $right) {
3106fb12b70Safresh1        return $left + $right;
3116fb12b70Safresh1    }
3126fb12b70Safresh1
313eac174f2Safresh1Calling C<foo(3, 7)> will assign C<3> into C<$left> and C<7> into C<$right>.
314eac174f2Safresh1
3156fb12b70Safresh1See L<perlsub/Signatures> for details.
3166fb12b70Safresh1
317eac174f2Safresh1This feature is available from Perl 5.20 onwards. From Perl 5.20 to 5.34,
318eac174f2Safresh1it was classed as experimental, and Perl emitted a warning for its usage,
319eac174f2Safresh1except when explicitly disabled:
320eac174f2Safresh1
321eac174f2Safresh1  no warnings "experimental::signatures";
322eac174f2Safresh1
323eac174f2Safresh1As of Perl 5.36, use of this feature no longer triggers a warning, though the
324eac174f2Safresh1C<experimental::signatures> warning category still exists (for compatibility
325eac174f2Safresh1with code that disables it). This feature is now considered stable, and is
326eac174f2Safresh1enabled automatically by C<use v5.36> (or higher).
3276fb12b70Safresh1
328b8851fccSafresh1=head2 The 'refaliasing' feature
329b8851fccSafresh1
330b8851fccSafresh1B<WARNING>: This feature is still experimental and the implementation may
331eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
332eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
333b8851fccSafresh1
334b8851fccSafresh1    no warnings "experimental::refaliasing";
335b8851fccSafresh1
336b8851fccSafresh1This enables aliasing via assignment to references:
337b8851fccSafresh1
338b8851fccSafresh1    \$a = \$b; # $a and $b now point to the same scalar
339b8851fccSafresh1    \@a = \@b; #                     to the same array
340b8851fccSafresh1    \%a = \%b;
341b8851fccSafresh1    \&a = \&b;
342b8851fccSafresh1    foreach \%hash (@array_of_hash_refs) {
343b8851fccSafresh1        ...
344b8851fccSafresh1    }
345b8851fccSafresh1
346b8851fccSafresh1See L<perlref/Assigning to References> for details.
347b8851fccSafresh1
348b8851fccSafresh1This feature is available from Perl 5.22 onwards.
349b8851fccSafresh1
350b8851fccSafresh1=head2 The 'bitwise' feature
351b8851fccSafresh1
352b8851fccSafresh1This makes the four standard bitwise operators (C<& | ^ ~>) treat their
353b8851fccSafresh1operands consistently as numbers, and introduces four new dotted operators
354b8851fccSafresh1(C<&. |. ^. ~.>) that treat their operands consistently as strings.  The
355b8851fccSafresh1same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
356b8851fccSafresh1
357b8851fccSafresh1See L<perlop/Bitwise String Operators> for details.
358b8851fccSafresh1
3599f11ffb7Safresh1This feature is available from Perl 5.22 onwards.  Starting in Perl 5.28,
3609f11ffb7Safresh1C<use v5.28> will enable the feature.  Before 5.28, it was still
3619f11ffb7Safresh1experimental and would emit a warning in the "experimental::bitwise"
3629f11ffb7Safresh1category.
3639f11ffb7Safresh1
3649f11ffb7Safresh1=head2 The 'declared_refs' feature
3659f11ffb7Safresh1
3669f11ffb7Safresh1B<WARNING>: This feature is still experimental and the implementation may
367eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
368eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
3699f11ffb7Safresh1
3709f11ffb7Safresh1    no warnings "experimental::declared_refs";
3719f11ffb7Safresh1
3729f11ffb7Safresh1This allows a reference to a variable to be declared with C<my>, C<state>,
373*e0680481Safresh1or C<our>, or localized with C<local>.  It is intended mainly for use in
3749f11ffb7Safresh1conjunction with the "refaliasing" feature.  See L<perlref/Declaring a
3759f11ffb7Safresh1Reference to a Variable> for examples.
3769f11ffb7Safresh1
3779f11ffb7Safresh1This feature is available from Perl 5.26 onwards.
378b8851fccSafresh1
37956d68f1eSafresh1=head2 The 'isa' feature
38056d68f1eSafresh1
38156d68f1eSafresh1This allows the use of the C<isa> infix operator, which tests whether the
38256d68f1eSafresh1scalar given by the left operand is an object of the class given by the
38356d68f1eSafresh1right operand. See L<perlop/Class Instance Operator> for more details.
38456d68f1eSafresh1
385eac174f2Safresh1This feature is available from Perl 5.32 onwards.  From Perl 5.32 to 5.34,
386eac174f2Safresh1it was classed as experimental, and Perl emitted a warning for its usage,
387eac174f2Safresh1except when explicitly disabled:
388eac174f2Safresh1
389eac174f2Safresh1    no warnings "experimental::isa";
390eac174f2Safresh1
391eac174f2Safresh1As of Perl 5.36, use of this feature no longer triggers a warning (though the
392eac174f2Safresh1C<experimental::isa> warning category stilll exists for compatibility with
393eac174f2Safresh1code that disables it). This feature is now considered stable, and is enabled
394eac174f2Safresh1automatically by C<use v5.36> (or higher).
39556d68f1eSafresh1
39656d68f1eSafresh1=head2 The 'indirect' feature
39756d68f1eSafresh1
39856d68f1eSafresh1This feature allows the use of L<indirect object
39956d68f1eSafresh1syntax|perlobj/Indirect Object Syntax> for method calls, e.g.  C<new
40056d68f1eSafresh1Foo 1, 2;>. It is enabled by default, but can be turned off to
40156d68f1eSafresh1disallow indirect object syntax.
40256d68f1eSafresh1
40356d68f1eSafresh1This feature is available under this name from Perl 5.32 onwards. In
40456d68f1eSafresh1previous versions, it was simply on all the time.  To disallow (or
40556d68f1eSafresh1warn on) indirect object syntax on older Perls, see the L<indirect>
40656d68f1eSafresh1CPAN module.
40756d68f1eSafresh1
408eac174f2Safresh1=head2 The 'multidimensional' feature
409eac174f2Safresh1
410eac174f2Safresh1This feature enables multidimensional array emulation, a perl 4 (or
411eac174f2Safresh1earlier) feature that was used to emulate multidimensional arrays with
412eac174f2Safresh1hashes.  This works by converting code like C<< $foo{$x, $y} >> into
413eac174f2Safresh1C<< $foo{join($;, $x, $y)} >>.  It is enabled by default, but can be
414eac174f2Safresh1turned off to disable multidimensional array emulation.
415eac174f2Safresh1
416eac174f2Safresh1When this feature is disabled the syntax that is normally replaced
417eac174f2Safresh1will report a compilation error.
418eac174f2Safresh1
419eac174f2Safresh1This feature is available under this name from Perl 5.34 onwards. In
420eac174f2Safresh1previous versions, it was simply on all the time.
421eac174f2Safresh1
422eac174f2Safresh1You can use the L<multidimensional> module on CPAN to disable
423eac174f2Safresh1multidimensional array emulation for older versions of Perl.
424eac174f2Safresh1
425*e0680481Safresh1=head2 The 'bareword_filehandles' feature
426eac174f2Safresh1
427eac174f2Safresh1This feature enables bareword filehandles for builtin functions
428eac174f2Safresh1operations, a generally discouraged practice.  It is enabled by
429eac174f2Safresh1default, but can be turned off to disable bareword filehandles, except
430eac174f2Safresh1for the exceptions listed below.
431eac174f2Safresh1
432eac174f2Safresh1The perl built-in filehandles C<STDIN>, C<STDOUT>, C<STDERR>, C<DATA>,
433eac174f2Safresh1C<ARGV>, C<ARGVOUT> and the special C<_> are always enabled.
434eac174f2Safresh1
435eac174f2Safresh1This feature is enabled under this name from Perl 5.34 onwards.  In
436eac174f2Safresh1previous versions it was simply on all the time.
437eac174f2Safresh1
438eac174f2Safresh1You can use the L<bareword::filehandles> module on CPAN to disable
439eac174f2Safresh1bareword filehandles for older versions of perl.
440eac174f2Safresh1
441*e0680481Safresh1=head2 The 'try' feature
442eac174f2Safresh1
443eac174f2Safresh1B<WARNING>: This feature is still experimental and the implementation may
444eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
445eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
446eac174f2Safresh1
447eac174f2Safresh1    no warnings "experimental::try";
448eac174f2Safresh1
449eac174f2Safresh1This feature enables the C<try> and C<catch> syntax, which allows exception
450eac174f2Safresh1handling, where exceptions thrown from the body of the block introduced with
451eac174f2Safresh1C<try> are caught by executing the body of the C<catch> block.
452eac174f2Safresh1
453eac174f2Safresh1For more information, see L<perlsyn/"Try Catch Exception Handling">.
454eac174f2Safresh1
455eac174f2Safresh1=head2 The 'defer' feature
456eac174f2Safresh1
457eac174f2Safresh1B<WARNING>: This feature is still experimental and the implementation may
458eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
459eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
460eac174f2Safresh1
461eac174f2Safresh1    no warnings "experimental::defer";
462eac174f2Safresh1
463eac174f2Safresh1This feature enables the C<defer> block syntax, which allows a block of code
464eac174f2Safresh1to be deferred until when the flow of control leaves the block which contained
465eac174f2Safresh1it. For more details, see L<perlsyn/defer>.
466eac174f2Safresh1
467eac174f2Safresh1=head2 The 'extra_paired_delimiters' feature
468eac174f2Safresh1
469eac174f2Safresh1B<WARNING>: This feature is still experimental and the implementation may
470eac174f2Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
471eac174f2Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
472eac174f2Safresh1
473eac174f2Safresh1    no warnings "experimental::extra_paired_delimiters";
474eac174f2Safresh1
475eac174f2Safresh1This feature enables the use of more paired string delimiters than the
476eac174f2Safresh1traditional four, S<C<< <  > >>>, S<C<( )>>, S<C<{ }>>, and S<C<[ ]>>.  When
477eac174f2Safresh1this feature is on, for example, you can say S<C<qrE<171>patE<187>>>.
478eac174f2Safresh1
479*e0680481Safresh1As with any usage of non-ASCII delimiters in a UTF-8-encoded source file, you
480*e0680481Safresh1will want to ensure the parser will decode the source code from UTF-8 bytes
481*e0680481Safresh1with a declaration such as C<use utf8>.
482*e0680481Safresh1
483eac174f2Safresh1This feature is available starting in Perl 5.36.
484eac174f2Safresh1
485eac174f2Safresh1The complete list of accepted paired delimiters as of Unicode 14.0 is:
486eac174f2Safresh1
487eac174f2Safresh1 (  )    U+0028, U+0029   LEFT/RIGHT PARENTHESIS
488eac174f2Safresh1 <  >    U+003C, U+003E   LESS-THAN/GREATER-THAN SIGN
489eac174f2Safresh1 [  ]    U+005B, U+005D   LEFT/RIGHT SQUARE BRACKET
490eac174f2Safresh1 {  }    U+007B, U+007D   LEFT/RIGHT CURLY BRACKET
491eac174f2Safresh1 «  »    U+00AB, U+00BB   LEFT/RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
492eac174f2Safresh1 »  «    U+00BB, U+00AB   RIGHT/LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
493eac174f2Safresh1 ܆  ܇    U+0706, U+0707   SYRIAC COLON SKEWED LEFT/RIGHT
494eac174f2Safresh1 ༺  ༻    U+0F3A, U+0F3B   TIBETAN MARK GUG RTAGS GYON,  TIBETAN MARK GUG
495eac174f2Safresh1                          RTAGS GYAS
496eac174f2Safresh1 ༼  ༽    U+0F3C, U+0F3D   TIBETAN MARK ANG KHANG GYON,  TIBETAN MARK ANG
497eac174f2Safresh1                          KHANG GYAS
498eac174f2Safresh1 ᚛  ᚜    U+169B, U+169C   OGHAM FEATHER MARK,  OGHAM REVERSED FEATHER MARK
499eac174f2Safresh1 ‘  ’    U+2018, U+2019   LEFT/RIGHT SINGLE QUOTATION MARK
500eac174f2Safresh1 ’  ‘    U+2019, U+2018   RIGHT/LEFT SINGLE QUOTATION MARK
501eac174f2Safresh1 “  ”    U+201C, U+201D   LEFT/RIGHT DOUBLE QUOTATION MARK
502eac174f2Safresh1 ”  “    U+201D, U+201C   RIGHT/LEFT DOUBLE QUOTATION MARK
503eac174f2Safresh1 ‵  ′    U+2035, U+2032   REVERSED PRIME,  PRIME
504eac174f2Safresh1 ‶  ″    U+2036, U+2033   REVERSED DOUBLE PRIME,  DOUBLE PRIME
505eac174f2Safresh1 ‷  ‴    U+2037, U+2034   REVERSED TRIPLE PRIME,  TRIPLE PRIME
506eac174f2Safresh1 ‹  ›    U+2039, U+203A   SINGLE LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
507eac174f2Safresh1 ›  ‹    U+203A, U+2039   SINGLE RIGHT/LEFT-POINTING ANGLE QUOTATION MARK
508eac174f2Safresh1 ⁅  ⁆    U+2045, U+2046   LEFT/RIGHT SQUARE BRACKET WITH QUILL
509eac174f2Safresh1 ⁍  ⁌    U+204D, U+204C   BLACK RIGHT/LEFTWARDS BULLET
510eac174f2Safresh1 ⁽  ⁾    U+207D, U+207E   SUPERSCRIPT LEFT/RIGHT PARENTHESIS
511eac174f2Safresh1 ₍  ₎    U+208D, U+208E   SUBSCRIPT LEFT/RIGHT PARENTHESIS
512eac174f2Safresh1 →  ←    U+2192, U+2190   RIGHT/LEFTWARDS ARROW
513eac174f2Safresh1 ↛  ↚    U+219B, U+219A   RIGHT/LEFTWARDS ARROW WITH STROKE
514eac174f2Safresh1 ↝  ↜    U+219D, U+219C   RIGHT/LEFTWARDS WAVE ARROW
515eac174f2Safresh1 ↠  ↞    U+21A0, U+219E   RIGHT/LEFTWARDS TWO HEADED ARROW
516eac174f2Safresh1 ↣  ↢    U+21A3, U+21A2   RIGHT/LEFTWARDS ARROW WITH TAIL
517eac174f2Safresh1 ↦  ↤    U+21A6, U+21A4   RIGHT/LEFTWARDS ARROW FROM BAR
518eac174f2Safresh1 ↪  ↩    U+21AA, U+21A9   RIGHT/LEFTWARDS ARROW WITH HOOK
519eac174f2Safresh1 ↬  ↫    U+21AC, U+21AB   RIGHT/LEFTWARDS ARROW WITH LOOP
520eac174f2Safresh1 ↱  ↰    U+21B1, U+21B0   UPWARDS ARROW WITH TIP RIGHT/LEFTWARDS
521eac174f2Safresh1 ↳  ↲    U+21B3, U+21B2   DOWNWARDS ARROW WITH TIP RIGHT/LEFTWARDS
522eac174f2Safresh1 ⇀  ↼    U+21C0, U+21BC   RIGHT/LEFTWARDS HARPOON WITH BARB UPWARDS
523eac174f2Safresh1 ⇁  ↽    U+21C1, U+21BD   RIGHT/LEFTWARDS HARPOON WITH BARB DOWNWARDS
524eac174f2Safresh1 ⇉  ⇇    U+21C9, U+21C7   RIGHT/LEFTWARDS PAIRED ARROWS
525eac174f2Safresh1 ⇏  ⇍    U+21CF, U+21CD   RIGHT/LEFTWARDS DOUBLE ARROW WITH STROKE
526eac174f2Safresh1 ⇒  ⇐    U+21D2, U+21D0   RIGHT/LEFTWARDS DOUBLE ARROW
527eac174f2Safresh1 ⇛  ⇚    U+21DB, U+21DA   RIGHT/LEFTWARDS TRIPLE ARROW
528eac174f2Safresh1 ⇝  ⇜    U+21DD, U+21DC   RIGHT/LEFTWARDS SQUIGGLE ARROW
529eac174f2Safresh1 ⇢  ⇠    U+21E2, U+21E0   RIGHT/LEFTWARDS DASHED ARROW
530eac174f2Safresh1 ⇥  ⇤    U+21E5, U+21E4   RIGHT/LEFTWARDS ARROW TO BAR
531eac174f2Safresh1 ⇨  ⇦    U+21E8, U+21E6   RIGHT/LEFTWARDS WHITE ARROW
532eac174f2Safresh1 ⇴  ⬰    U+21F4, U+2B30   RIGHT/LEFT ARROW WITH SMALL CIRCLE
533eac174f2Safresh1 ⇶  ⬱    U+21F6, U+2B31   THREE RIGHT/LEFTWARDS ARROWS
534eac174f2Safresh1 ⇸  ⇷    U+21F8, U+21F7   RIGHT/LEFTWARDS ARROW WITH VERTICAL STROKE
535eac174f2Safresh1 ⇻  ⇺    U+21FB, U+21FA   RIGHT/LEFTWARDS ARROW WITH DOUBLE VERTICAL
536eac174f2Safresh1                          STROKE
537eac174f2Safresh1 ⇾  ⇽    U+21FE, U+21FD   RIGHT/LEFTWARDS OPEN-HEADED ARROW
538eac174f2Safresh1 ∈  ∋    U+2208, U+220B   ELEMENT OF,  CONTAINS AS MEMBER
539eac174f2Safresh1 ∉  ∌    U+2209, U+220C   NOT AN ELEMENT OF,  DOES NOT CONTAIN AS MEMBER
540eac174f2Safresh1 ∊  ∍    U+220A, U+220D   SMALL ELEMENT OF,  SMALL CONTAINS AS MEMBER
541eac174f2Safresh1 ≤  ≥    U+2264, U+2265   LESS-THAN/GREATER-THAN OR EQUAL TO
542eac174f2Safresh1 ≦  ≧    U+2266, U+2267   LESS-THAN/GREATER-THAN OVER EQUAL TO
543eac174f2Safresh1 ≨  ≩    U+2268, U+2269   LESS-THAN/GREATER-THAN BUT NOT EQUAL TO
544eac174f2Safresh1 ≪  ≫    U+226A, U+226B   MUCH LESS-THAN/GREATER-THAN
545eac174f2Safresh1 ≮  ≯    U+226E, U+226F   NOT LESS-THAN/GREATER-THAN
546eac174f2Safresh1 ≰  ≱    U+2270, U+2271   NEITHER LESS-THAN/GREATER-THAN NOR EQUAL TO
547eac174f2Safresh1 ≲  ≳    U+2272, U+2273   LESS-THAN/GREATER-THAN OR EQUIVALENT TO
548eac174f2Safresh1 ≴  ≵    U+2274, U+2275   NEITHER LESS-THAN/GREATER-THAN NOR EQUIVALENT TO
549eac174f2Safresh1 ≺  ≻    U+227A, U+227B   PRECEDES/SUCCEEDS
550eac174f2Safresh1 ≼  ≽    U+227C, U+227D   PRECEDES/SUCCEEDS OR EQUAL TO
551eac174f2Safresh1 ≾  ≿    U+227E, U+227F   PRECEDES/SUCCEEDS OR EQUIVALENT TO
552eac174f2Safresh1 ⊀  ⊁    U+2280, U+2281   DOES NOT PRECEDE/SUCCEED
553eac174f2Safresh1 ⊂  ⊃    U+2282, U+2283   SUBSET/SUPERSET OF
554eac174f2Safresh1 ⊄  ⊅    U+2284, U+2285   NOT A SUBSET/SUPERSET OF
555eac174f2Safresh1 ⊆  ⊇    U+2286, U+2287   SUBSET/SUPERSET OF OR EQUAL TO
556eac174f2Safresh1 ⊈  ⊉    U+2288, U+2289   NEITHER A SUBSET/SUPERSET OF NOR EQUAL TO
557eac174f2Safresh1 ⊊  ⊋    U+228A, U+228B   SUBSET/SUPERSET OF WITH NOT EQUAL TO
558eac174f2Safresh1 ⊣  ⊢    U+22A3, U+22A2   LEFT/RIGHT TACK
559eac174f2Safresh1 ⊦  ⫞    U+22A6, U+2ADE   ASSERTION,  SHORT LEFT TACK
560eac174f2Safresh1 ⊨  ⫤    U+22A8, U+2AE4   TRUE,  VERTICAL BAR DOUBLE LEFT TURNSTILE
561eac174f2Safresh1 ⊩  ⫣    U+22A9, U+2AE3   FORCES,  DOUBLE VERTICAL BAR LEFT TURNSTILE
562eac174f2Safresh1 ⊰  ⊱    U+22B0, U+22B1   PRECEDES/SUCCEEDS UNDER RELATION
563eac174f2Safresh1 ⋐  ⋑    U+22D0, U+22D1   DOUBLE SUBSET/SUPERSET
564eac174f2Safresh1 ⋖  ⋗    U+22D6, U+22D7   LESS-THAN/GREATER-THAN WITH DOT
565eac174f2Safresh1 ⋘  ⋙    U+22D8, U+22D9   VERY MUCH LESS-THAN/GREATER-THAN
566eac174f2Safresh1 ⋜  ⋝    U+22DC, U+22DD   EQUAL TO OR LESS-THAN/GREATER-THAN
567eac174f2Safresh1 ⋞  ⋟    U+22DE, U+22DF   EQUAL TO OR PRECEDES/SUCCEEDS
568eac174f2Safresh1 ⋠  ⋡    U+22E0, U+22E1   DOES NOT PRECEDE/SUCCEED OR EQUAL
569eac174f2Safresh1 ⋦  ⋧    U+22E6, U+22E7   LESS-THAN/GREATER-THAN BUT NOT EQUIVALENT TO
570eac174f2Safresh1 ⋨  ⋩    U+22E8, U+22E9   PRECEDES/SUCCEEDS BUT NOT EQUIVALENT TO
571eac174f2Safresh1 ⋲  ⋺    U+22F2, U+22FA   ELEMENT OF/CONTAINS WITH LONG HORIZONTAL STROKE
572eac174f2Safresh1 ⋳  ⋻    U+22F3, U+22FB   ELEMENT OF/CONTAINS WITH VERTICAL BAR AT END OF
573eac174f2Safresh1                          HORIZONTAL STROKE
574eac174f2Safresh1 ⋴  ⋼    U+22F4, U+22FC   SMALL ELEMENT OF/CONTAINS WITH VERTICAL BAR AT
575eac174f2Safresh1                          END OF HORIZONTAL STROKE
576eac174f2Safresh1 ⋶  ⋽    U+22F6, U+22FD   ELEMENT OF/CONTAINS WITH OVERBAR
577eac174f2Safresh1 ⋷  ⋾    U+22F7, U+22FE   SMALL ELEMENT OF/CONTAINS WITH OVERBAR
578eac174f2Safresh1 ⌈  ⌉    U+2308, U+2309   LEFT/RIGHT CEILING
579eac174f2Safresh1 ⌊  ⌋    U+230A, U+230B   LEFT/RIGHT FLOOR
580eac174f2Safresh1 ⌦  ⌫    U+2326, U+232B   ERASE TO THE RIGHT/LEFT
581eac174f2Safresh1 〈 〉   U+2329, U+232A   LEFT/RIGHT-POINTING ANGLE BRACKET
582eac174f2Safresh1 ⍈  ⍇    U+2348, U+2347   APL FUNCTIONAL SYMBOL QUAD RIGHT/LEFTWARDS ARROW
583eac174f2Safresh1 ⏩ ⏪   U+23E9, U+23EA   BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE
584eac174f2Safresh1 ⏭  ⏮    U+23ED, U+23EE   BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE WITH
585eac174f2Safresh1                          VERTICAL BAR
586eac174f2Safresh1 ☛  ☚    U+261B, U+261A   BLACK RIGHT/LEFT POINTING INDEX
587eac174f2Safresh1 ☞  ☜    U+261E, U+261C   WHITE RIGHT/LEFT POINTING INDEX
588eac174f2Safresh1 ⚞  ⚟    U+269E, U+269F   THREE LINES CONVERGING RIGHT/LEFT
589eac174f2Safresh1 ❨  ❩    U+2768, U+2769   MEDIUM LEFT/RIGHT PARENTHESIS ORNAMENT
590eac174f2Safresh1 ❪  ❫    U+276A, U+276B   MEDIUM FLATTENED LEFT/RIGHT PARENTHESIS ORNAMENT
591eac174f2Safresh1 ❬  ❭    U+276C, U+276D   MEDIUM LEFT/RIGHT-POINTING ANGLE BRACKET
592eac174f2Safresh1                          ORNAMENT
593eac174f2Safresh1 ❮  ❯    U+276E, U+276F   HEAVY LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
594eac174f2Safresh1                          ORNAMENT
595eac174f2Safresh1 ❰  ❱    U+2770, U+2771   HEAVY LEFT/RIGHT-POINTING ANGLE BRACKET ORNAMENT
596eac174f2Safresh1 ❲  ❳    U+2772, U+2773   LIGHT LEFT/RIGHT TORTOISE SHELL BRACKET ORNAMENT
597eac174f2Safresh1 ❴  ❵    U+2774, U+2775   MEDIUM LEFT/RIGHT CURLY BRACKET ORNAMENT
598eac174f2Safresh1 ⟃  ⟄    U+27C3, U+27C4   OPEN SUBSET/SUPERSET
599eac174f2Safresh1 ⟅  ⟆    U+27C5, U+27C6   LEFT/RIGHT S-SHAPED BAG DELIMITER
600eac174f2Safresh1 ⟈  ⟉    U+27C8, U+27C9   REVERSE SOLIDUS PRECEDING SUBSET,  SUPERSET
601eac174f2Safresh1                          PRECEDING SOLIDUS
602eac174f2Safresh1 ⟞  ⟝    U+27DE, U+27DD   LONG LEFT/RIGHT TACK
603eac174f2Safresh1 ⟦  ⟧    U+27E6, U+27E7   MATHEMATICAL LEFT/RIGHT WHITE SQUARE BRACKET
604eac174f2Safresh1 ⟨  ⟩    U+27E8, U+27E9   MATHEMATICAL LEFT/RIGHT ANGLE BRACKET
605eac174f2Safresh1 ⟪  ⟫    U+27EA, U+27EB   MATHEMATICAL LEFT/RIGHT DOUBLE ANGLE BRACKET
606eac174f2Safresh1 ⟬  ⟭    U+27EC, U+27ED   MATHEMATICAL LEFT/RIGHT WHITE TORTOISE SHELL
607eac174f2Safresh1                          BRACKET
608eac174f2Safresh1 ⟮  ⟯    U+27EE, U+27EF   MATHEMATICAL LEFT/RIGHT FLATTENED PARENTHESIS
609eac174f2Safresh1 ⟴  ⬲    U+27F4, U+2B32   RIGHT/LEFT ARROW WITH CIRCLED PLUS
610eac174f2Safresh1 ⟶  ⟵    U+27F6, U+27F5   LONG RIGHT/LEFTWARDS ARROW
611eac174f2Safresh1 ⟹  ⟸    U+27F9, U+27F8   LONG RIGHT/LEFTWARDS DOUBLE ARROW
612eac174f2Safresh1 ⟼  ⟻    U+27FC, U+27FB   LONG RIGHT/LEFTWARDS ARROW FROM BAR
613eac174f2Safresh1 ⟾  ⟽    U+27FE, U+27FD   LONG RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR
614eac174f2Safresh1 ⟿  ⬳    U+27FF, U+2B33   LONG RIGHT/LEFTWARDS SQUIGGLE ARROW
615eac174f2Safresh1 ⤀  ⬴    U+2900, U+2B34   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH VERTICAL
616eac174f2Safresh1                          STROKE
617eac174f2Safresh1 ⤁  ⬵    U+2901, U+2B35   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH DOUBLE
618eac174f2Safresh1                          VERTICAL STROKE
619eac174f2Safresh1 ⤃  ⤂    U+2903, U+2902   RIGHT/LEFTWARDS DOUBLE ARROW WITH VERTICAL
620eac174f2Safresh1                          STROKE
621eac174f2Safresh1 ⤅  ⬶    U+2905, U+2B36   RIGHT/LEFTWARDS TWO-HEADED ARROW FROM BAR
622eac174f2Safresh1 ⤇  ⤆    U+2907, U+2906   RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR
623eac174f2Safresh1 ⤍  ⤌    U+290D, U+290C   RIGHT/LEFTWARDS DOUBLE DASH ARROW
624eac174f2Safresh1 ⤏  ⤎    U+290F, U+290E   RIGHT/LEFTWARDS TRIPLE DASH ARROW
625eac174f2Safresh1 ⤐  ⬷    U+2910, U+2B37   RIGHT/LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
626eac174f2Safresh1 ⤑  ⬸    U+2911, U+2B38   RIGHT/LEFTWARDS ARROW WITH DOTTED STEM
627eac174f2Safresh1 ⤔  ⬹    U+2914, U+2B39   RIGHT/LEFTWARDS ARROW WITH TAIL WITH VERTICAL
628eac174f2Safresh1                          STROKE
629eac174f2Safresh1 ⤕  ⬺    U+2915, U+2B3A   RIGHT/LEFTWARDS ARROW WITH TAIL WITH DOUBLE
630eac174f2Safresh1                          VERTICAL STROKE
631eac174f2Safresh1 ⤖  ⬻    U+2916, U+2B3B   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL
632eac174f2Safresh1 ⤗  ⬼    U+2917, U+2B3C   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH
633eac174f2Safresh1                          VERTICAL STROKE
634eac174f2Safresh1 ⤘  ⬽    U+2918, U+2B3D   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH
635eac174f2Safresh1                          DOUBLE VERTICAL STROKE
636eac174f2Safresh1 ⤚  ⤙    U+291A, U+2919   RIGHT/LEFTWARDS ARROW-TAIL
637eac174f2Safresh1 ⤜  ⤛    U+291C, U+291B   RIGHT/LEFTWARDS DOUBLE ARROW-TAIL
638eac174f2Safresh1 ⤞  ⤝    U+291E, U+291D   RIGHT/LEFTWARDS ARROW TO BLACK DIAMOND
639eac174f2Safresh1 ⤠  ⤟    U+2920, U+291F   RIGHT/LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
640eac174f2Safresh1 ⤳  ⬿    U+2933, U+2B3F   WAVE ARROW POINTING DIRECTLY RIGHT/LEFT
641eac174f2Safresh1 ⤷  ⤶    U+2937, U+2936   ARROW POINTING DOWNWARDS THEN CURVING RIGHT/
642eac174f2Safresh1                          LEFTWARDS
643eac174f2Safresh1 ⥅  ⥆    U+2945, U+2946   RIGHT/LEFTWARDS ARROW WITH PLUS BELOW
644eac174f2Safresh1 ⥇  ⬾    U+2947, U+2B3E   RIGHT/LEFTWARDS ARROW THROUGH X
645eac174f2Safresh1 ⥓  ⥒    U+2953, U+2952   RIGHT/LEFTWARDS HARPOON WITH BARB UP TO BAR
646eac174f2Safresh1 ⥗  ⥖    U+2957, U+2956   RIGHT/LEFTWARDS HARPOON WITH BARB DOWN TO BAR
647eac174f2Safresh1 ⥛  ⥚    U+295B, U+295A   RIGHT/LEFTWARDS HARPOON WITH BARB UP FROM BAR
648eac174f2Safresh1 ⥟  ⥞    U+295F, U+295E   RIGHT/LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
649eac174f2Safresh1 ⥤  ⥢    U+2964, U+2962   RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE
650eac174f2Safresh1                          RIGHT/LEFTWARDS HARPOON WITH BARB DOWN
651eac174f2Safresh1 ⥬  ⥪    U+296C, U+296A   RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE LONG
652eac174f2Safresh1                          DASH
653eac174f2Safresh1 ⥭  ⥫    U+296D, U+296B   RIGHT/LEFTWARDS HARPOON WITH BARB DOWN BELOW
654eac174f2Safresh1                          LONG DASH
655eac174f2Safresh1 ⥱  ⭀    U+2971, U+2B40   EQUALS SIGN ABOVE RIGHT/LEFTWARDS ARROW
656eac174f2Safresh1 ⥲  ⭁    U+2972, U+2B41   TILDE OPERATOR ABOVE RIGHTWARDS ARROW,  REVERSE
657eac174f2Safresh1                          TILDE OPERATOR ABOVE LEFTWARDS ARROW
658eac174f2Safresh1 ⥴  ⭋    U+2974, U+2B4B   RIGHTWARDS ARROW ABOVE TILDE OPERATOR,
659eac174f2Safresh1                          LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
660eac174f2Safresh1 ⥵  ⭂    U+2975, U+2B42   RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO,
661eac174f2Safresh1                          LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
662eac174f2Safresh1 ⥹  ⥻    U+2979, U+297B   SUBSET/SUPERSET ABOVE RIGHT/LEFTWARDS ARROW
663eac174f2Safresh1 ⦃  ⦄    U+2983, U+2984   LEFT/RIGHT WHITE CURLY BRACKET
664eac174f2Safresh1 ⦅  ⦆    U+2985, U+2986   LEFT/RIGHT WHITE PARENTHESIS
665eac174f2Safresh1 ⦇  ⦈    U+2987, U+2988   Z NOTATION LEFT/RIGHT IMAGE BRACKET
666eac174f2Safresh1 ⦉  ⦊    U+2989, U+298A   Z NOTATION LEFT/RIGHT BINDING BRACKET
667eac174f2Safresh1 ⦋  ⦌    U+298B, U+298C   LEFT/RIGHT SQUARE BRACKET WITH UNDERBAR
668eac174f2Safresh1 ⦍  ⦐    U+298D, U+2990   LEFT/RIGHT SQUARE BRACKET WITH TICK IN TOP
669eac174f2Safresh1                          CORNER
670eac174f2Safresh1 ⦏  ⦎    U+298F, U+298E   LEFT/RIGHT SQUARE BRACKET WITH TICK IN BOTTOM
671eac174f2Safresh1                          CORNER
672eac174f2Safresh1 ⦑  ⦒    U+2991, U+2992   LEFT/RIGHT ANGLE BRACKET WITH DOT
673eac174f2Safresh1 ⦓  ⦔    U+2993, U+2994   LEFT/RIGHT ARC LESS-THAN/GREATER-THAN BRACKET
674eac174f2Safresh1 ⦕  ⦖    U+2995, U+2996   DOUBLE LEFT/RIGHT ARC GREATER-THAN/LESS-THAN
675eac174f2Safresh1                          BRACKET
676eac174f2Safresh1 ⦗  ⦘    U+2997, U+2998   LEFT/RIGHT BLACK TORTOISE SHELL BRACKET
677eac174f2Safresh1 ⦨  ⦩    U+29A8, U+29A9   MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW
678eac174f2Safresh1                          POINTING UP AND RIGHT/LEFT
679eac174f2Safresh1 ⦪  ⦫    U+29AA, U+29AB   MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW
680eac174f2Safresh1                          POINTING DOWN AND RIGHT/LEFT
681eac174f2Safresh1 ⦳  ⦴    U+29B3, U+29B4   EMPTY SET WITH RIGHT/LEFT ARROW ABOVE
682eac174f2Safresh1 ⧀  ⧁    U+29C0, U+29C1   CIRCLED LESS-THAN/GREATER-THAN
683eac174f2Safresh1 ⧘  ⧙    U+29D8, U+29D9   LEFT/RIGHT WIGGLY FENCE
684eac174f2Safresh1 ⧚  ⧛    U+29DA, U+29DB   LEFT/RIGHT DOUBLE WIGGLY FENCE
685eac174f2Safresh1 ⧼  ⧽    U+29FC, U+29FD   LEFT/RIGHT-POINTING CURVED ANGLE BRACKET
686eac174f2Safresh1 ⩹  ⩺    U+2A79, U+2A7A   LESS-THAN/GREATER-THAN WITH CIRCLE INSIDE
687eac174f2Safresh1 ⩻  ⩼    U+2A7B, U+2A7C   LESS-THAN/GREATER-THAN WITH QUESTION MARK ABOVE
688eac174f2Safresh1 ⩽  ⩾    U+2A7D, U+2A7E   LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO
689eac174f2Safresh1 ⩿  ⪀    U+2A7F, U+2A80   LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
690eac174f2Safresh1                          DOT INSIDE
691eac174f2Safresh1 ⪁  ⪂    U+2A81, U+2A82   LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
692eac174f2Safresh1                          DOT ABOVE
693eac174f2Safresh1 ⪃  ⪄    U+2A83, U+2A84   LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
694eac174f2Safresh1                          DOT ABOVE RIGHT/LEFT
695eac174f2Safresh1 ⪅  ⪆    U+2A85, U+2A86   LESS-THAN/GREATER-THAN OR APPROXIMATE
696eac174f2Safresh1 ⪇  ⪈    U+2A87, U+2A88   LESS-THAN/GREATER-THAN AND SINGLE-LINE NOT
697eac174f2Safresh1                          EQUAL TO
698eac174f2Safresh1 ⪉  ⪊    U+2A89, U+2A8A   LESS-THAN/GREATER-THAN AND NOT APPROXIMATE
699eac174f2Safresh1 ⪍  ⪎    U+2A8D, U+2A8E   LESS-THAN/GREATER-THAN ABOVE SIMILAR OR EQUAL
700eac174f2Safresh1 ⪕  ⪖    U+2A95, U+2A96   SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN
701eac174f2Safresh1 ⪗  ⪘    U+2A97, U+2A98   SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN WITH
702eac174f2Safresh1                          DOT INSIDE
703eac174f2Safresh1 ⪙  ⪚    U+2A99, U+2A9A   DOUBLE-LINE EQUAL TO OR LESS-THAN/GREATER-THAN
704eac174f2Safresh1 ⪛  ⪜    U+2A9B, U+2A9C   DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/
705eac174f2Safresh1                          GREATER-THAN
706eac174f2Safresh1 ⪝  ⪞    U+2A9D, U+2A9E   SIMILAR OR LESS-THAN/GREATER-THAN
707eac174f2Safresh1 ⪟  ⪠    U+2A9F, U+2AA0   SIMILAR ABOVE LESS-THAN/GREATER-THAN ABOVE
708eac174f2Safresh1                          EQUALS SIGN
709eac174f2Safresh1 ⪡  ⪢    U+2AA1, U+2AA2   DOUBLE NESTED LESS-THAN/GREATER-THAN
710eac174f2Safresh1 ⪦  ⪧    U+2AA6, U+2AA7   LESS-THAN/GREATER-THAN CLOSED BY CURVE
711eac174f2Safresh1 ⪨  ⪩    U+2AA8, U+2AA9   LESS-THAN/GREATER-THAN CLOSED BY CURVE ABOVE
712eac174f2Safresh1                          SLANTED EQUAL
713eac174f2Safresh1 ⪪  ⪫    U+2AAA, U+2AAB   SMALLER THAN/LARGER THAN
714eac174f2Safresh1 ⪬  ⪭    U+2AAC, U+2AAD   SMALLER THAN/LARGER THAN OR EQUAL TO
715eac174f2Safresh1 ⪯  ⪰    U+2AAF, U+2AB0   PRECEDES/SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
716eac174f2Safresh1 ⪱  ⪲    U+2AB1, U+2AB2   PRECEDES/SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
717eac174f2Safresh1 ⪳  ⪴    U+2AB3, U+2AB4   PRECEDES/SUCCEEDS ABOVE EQUALS SIGN
718eac174f2Safresh1 ⪵  ⪶    U+2AB5, U+2AB6   PRECEDES/SUCCEEDS ABOVE NOT EQUAL TO
719eac174f2Safresh1 ⪷  ⪸    U+2AB7, U+2AB8   PRECEDES/SUCCEEDS ABOVE ALMOST EQUAL TO
720eac174f2Safresh1 ⪹  ⪺    U+2AB9, U+2ABA   PRECEDES/SUCCEEDS ABOVE NOT ALMOST EQUAL TO
721eac174f2Safresh1 ⪻  ⪼    U+2ABB, U+2ABC   DOUBLE PRECEDES/SUCCEEDS
722eac174f2Safresh1 ⪽  ⪾    U+2ABD, U+2ABE   SUBSET/SUPERSET WITH DOT
723eac174f2Safresh1 ⪿  ⫀    U+2ABF, U+2AC0   SUBSET/SUPERSET WITH PLUS SIGN BELOW
724eac174f2Safresh1 ⫁  ⫂    U+2AC1, U+2AC2   SUBSET/SUPERSET WITH MULTIPLICATION SIGN BELOW
725eac174f2Safresh1 ⫃  ⫄    U+2AC3, U+2AC4   SUBSET/SUPERSET OF OR EQUAL TO WITH DOT ABOVE
726eac174f2Safresh1 ⫅  ⫆    U+2AC5, U+2AC6   SUBSET/SUPERSET OF ABOVE EQUALS SIGN
727eac174f2Safresh1 ⫇  ⫈    U+2AC7, U+2AC8   SUBSET/SUPERSET OF ABOVE TILDE OPERATOR
728eac174f2Safresh1 ⫉  ⫊    U+2AC9, U+2ACA   SUBSET/SUPERSET OF ABOVE ALMOST EQUAL TO
729eac174f2Safresh1 ⫋  ⫌    U+2ACB, U+2ACC   SUBSET/SUPERSET OF ABOVE NOT EQUAL TO
730eac174f2Safresh1 ⫏  ⫐    U+2ACF, U+2AD0   CLOSED SUBSET/SUPERSET
731eac174f2Safresh1 ⫑  ⫒    U+2AD1, U+2AD2   CLOSED SUBSET/SUPERSET OR EQUAL TO
732eac174f2Safresh1 ⫕  ⫖    U+2AD5, U+2AD6   SUBSET/SUPERSET ABOVE SUBSET/SUPERSET
733eac174f2Safresh1 ⫥  ⊫    U+2AE5, U+22AB   DOUBLE VERTICAL BAR DOUBLE LEFT/RIGHT TURNSTILE
734eac174f2Safresh1 ⫷  ⫸    U+2AF7, U+2AF8   TRIPLE NESTED LESS-THAN/GREATER-THAN
735eac174f2Safresh1 ⫹  ⫺    U+2AF9, U+2AFA   DOUBLE-LINE SLANTED LESS-THAN/GREATER-THAN OR
736eac174f2Safresh1                          EQUAL TO
737eac174f2Safresh1 ⭆  ⭅    U+2B46, U+2B45   RIGHT/LEFTWARDS QUADRUPLE ARROW
738eac174f2Safresh1 ⭇  ⭉    U+2B47, U+2B49   REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW,
739eac174f2Safresh1                          TILDE OPERATOR ABOVE LEFTWARDS ARROW
740eac174f2Safresh1 ⭈  ⭊    U+2B48, U+2B4A   RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL
741eac174f2Safresh1                          TO,  LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
742eac174f2Safresh1 ⭌  ⥳    U+2B4C, U+2973   RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR,
743eac174f2Safresh1                          LEFTWARDS ARROW ABOVE TILDE OPERATOR
744eac174f2Safresh1 ⭢  ⭠    U+2B62, U+2B60   RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW
745eac174f2Safresh1 ⭬  ⭪    U+2B6C, U+2B6A   RIGHT/LEFTWARDS TRIANGLE-HEADED DASHED ARROW
746eac174f2Safresh1 ⭲  ⭰    U+2B72, U+2B70   RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
747eac174f2Safresh1 ⭼  ⭺    U+2B7C, U+2B7A   RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
748eac174f2Safresh1                          DOUBLE VERTICAL STROKE
749eac174f2Safresh1 ⮆  ⮄    U+2B86, U+2B84   RIGHT/LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
750eac174f2Safresh1 ⮊  ⮈    U+2B8A, U+2B88   RIGHT/LEFTWARDS BLACK CIRCLED WHITE ARROW
751eac174f2Safresh1 ⮕  ⬅    U+2B95, U+2B05   RIGHT/LEFTWARDS BLACK ARROW
752eac174f2Safresh1 ⮚  ⮘    U+2B9A, U+2B98   THREE-D TOP-LIGHTED RIGHT/LEFTWARDS EQUILATERAL
753eac174f2Safresh1                          ARROWHEAD
754eac174f2Safresh1 ⮞  ⮜    U+2B9E, U+2B9C   BLACK RIGHT/LEFTWARDS EQUILATERAL ARROWHEAD
755eac174f2Safresh1 ⮡  ⮠    U+2BA1, U+2BA0   DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP
756eac174f2Safresh1                          RIGHT/LEFTWARDS
757eac174f2Safresh1 ⮣  ⮢    U+2BA3, U+2BA2   UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP
758eac174f2Safresh1                          RIGHT/LEFTWARDS
759eac174f2Safresh1 ⮩  ⮨    U+2BA9, U+2BA8   BLACK CURVED DOWNWARDS AND RIGHT/LEFTWARDS ARROW
760eac174f2Safresh1 ⮫  ⮪    U+2BAB, U+2BAA   BLACK CURVED UPWARDS AND RIGHT/LEFTWARDS ARROW
761eac174f2Safresh1 ⮱  ⮰    U+2BB1, U+2BB0   RIBBON ARROW DOWN RIGHT/LEFT
762eac174f2Safresh1 ⮳  ⮲    U+2BB3, U+2BB2   RIBBON ARROW UP RIGHT/LEFT
763eac174f2Safresh1 ⯮  ⯬    U+2BEE, U+2BEC   RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE
764eac174f2Safresh1                          ARROWHEADS
765eac174f2Safresh1 ⸂  ⸃    U+2E02, U+2E03   LEFT/RIGHT SUBSTITUTION BRACKET
766eac174f2Safresh1 ⸃  ⸂    U+2E03, U+2E02   RIGHT/LEFT SUBSTITUTION BRACKET
767eac174f2Safresh1 ⸄  ⸅    U+2E04, U+2E05   LEFT/RIGHT DOTTED SUBSTITUTION BRACKET
768eac174f2Safresh1 ⸅  ⸄    U+2E05, U+2E04   RIGHT/LEFT DOTTED SUBSTITUTION BRACKET
769eac174f2Safresh1 ⸉  ⸊    U+2E09, U+2E0A   LEFT/RIGHT TRANSPOSITION BRACKET
770eac174f2Safresh1 ⸊  ⸉    U+2E0A, U+2E09   RIGHT/LEFT TRANSPOSITION BRACKET
771eac174f2Safresh1 ⸌  ⸍    U+2E0C, U+2E0D   LEFT/RIGHT RAISED OMISSION BRACKET
772eac174f2Safresh1 ⸍  ⸌    U+2E0D, U+2E0C   RIGHT/LEFT RAISED OMISSION BRACKET
773eac174f2Safresh1 ⸑  ⸐    U+2E11, U+2E10   REVERSED FORKED PARAGRAPHOS,  FORKED PARAGRAPHOS
774eac174f2Safresh1 ⸜  ⸝    U+2E1C, U+2E1D   LEFT/RIGHT LOW PARAPHRASE BRACKET
775eac174f2Safresh1 ⸝  ⸜    U+2E1D, U+2E1C   RIGHT/LEFT LOW PARAPHRASE BRACKET
776eac174f2Safresh1 ⸠  ⸡    U+2E20, U+2E21   LEFT/RIGHT VERTICAL BAR WITH QUILL
777eac174f2Safresh1 ⸡  ⸠    U+2E21, U+2E20   RIGHT/LEFT VERTICAL BAR WITH QUILL
778eac174f2Safresh1 ⸢  ⸣    U+2E22, U+2E23   TOP LEFT/RIGHT HALF BRACKET
779eac174f2Safresh1 ⸤  ⸥    U+2E24, U+2E25   BOTTOM LEFT/RIGHT HALF BRACKET
780eac174f2Safresh1 ⸦  ⸧    U+2E26, U+2E27   LEFT/RIGHT SIDEWAYS U BRACKET
781eac174f2Safresh1 ⸨  ⸩    U+2E28, U+2E29   LEFT/RIGHT DOUBLE PARENTHESIS
782eac174f2Safresh1 ⸶  ⸷    U+2E36, U+2E37   DAGGER WITH LEFT/RIGHT GUARD
783eac174f2Safresh1 ⹂  „    U+2E42, U+201E   DOUBLE LOW-REVERSED-9 QUOTATION MARK,  DOUBLE
784eac174f2Safresh1                          LOW-9 QUOTATION MARK
785eac174f2Safresh1 ⹕  ⹖    U+2E55, U+2E56   LEFT/RIGHT SQUARE BRACKET WITH STROKE
786eac174f2Safresh1 ⹗  ⹘    U+2E57, U+2E58   LEFT/RIGHT SQUARE BRACKET WITH DOUBLE STROKE
787eac174f2Safresh1 ⹙  ⹚    U+2E59, U+2E5A   TOP HALF LEFT/RIGHT PARENTHESIS
788eac174f2Safresh1 ⹛  ⹜    U+2E5B, U+2E5C   BOTTOM HALF LEFT/RIGHT PARENTHESIS
789eac174f2Safresh1 〈 〉   U+3008, U+3009   LEFT/RIGHT ANGLE BRACKET
790eac174f2Safresh1 《 》   U+300A, U+300B   LEFT/RIGHT DOUBLE ANGLE BRACKET
791eac174f2Safresh1 「 」   U+300C, U+300D   LEFT/RIGHT CORNER BRACKET
792eac174f2Safresh1 『 』   U+300E, U+300F   LEFT/RIGHT WHITE CORNER BRACKET
793eac174f2Safresh1 【 】   U+3010, U+3011   LEFT/RIGHT BLACK LENTICULAR BRACKET
794eac174f2Safresh1 〔 〕   U+3014, U+3015   LEFT/RIGHT TORTOISE SHELL BRACKET
795eac174f2Safresh1 〖 〗   U+3016, U+3017   LEFT/RIGHT WHITE LENTICULAR BRACKET
796eac174f2Safresh1 〘 〙   U+3018, U+3019   LEFT/RIGHT WHITE TORTOISE SHELL BRACKET
797eac174f2Safresh1 〚 〛   U+301A, U+301B   LEFT/RIGHT WHITE SQUARE BRACKET
798eac174f2Safresh1 〝 〞   U+301D, U+301E   REVERSED DOUBLE PRIME QUOTATION MARK,  DOUBLE
799eac174f2Safresh1                          PRIME QUOTATION MARK
800eac174f2Safresh1 ꧁  ꧂    U+A9C1, U+A9C2   JAVANESE LEFT/RIGHT RERENGGAN
801eac174f2Safresh1 ﴾  ﴿    U+FD3E, U+FD3F   ORNATE LEFT/RIGHT PARENTHESIS
802eac174f2Safresh1 ﹙ ﹚   U+FE59, U+FE5A   SMALL LEFT/RIGHT PARENTHESIS
803eac174f2Safresh1 ﹛ ﹜   U+FE5B, U+FE5C   SMALL LEFT/RIGHT CURLY BRACKET
804eac174f2Safresh1 ﹝ ﹞   U+FE5D, U+FE5E   SMALL LEFT/RIGHT TORTOISE SHELL BRACKET
805eac174f2Safresh1 ﹤ ﹥   U+FE64, U+FE65   SMALL LESS-THAN/GREATER-THAN SIGN
806eac174f2Safresh1 ( )   U+FF08, U+FF09   FULLWIDTH LEFT/RIGHT PARENTHESIS
807eac174f2Safresh1 < >   U+FF1C, U+FF1E   FULLWIDTH LESS-THAN/GREATER-THAN SIGN
808eac174f2Safresh1 [ ]   U+FF3B, U+FF3D   FULLWIDTH LEFT/RIGHT SQUARE BRACKET
809eac174f2Safresh1 { }   U+FF5B, U+FF5D   FULLWIDTH LEFT/RIGHT CURLY BRACKET
810eac174f2Safresh1 ⦅ ⦆   U+FF5F, U+FF60   FULLWIDTH LEFT/RIGHT WHITE PARENTHESIS
811eac174f2Safresh1 「  」    U+FF62, U+FF63   HALFWIDTH LEFT/RIGHT CORNER BRACKET
812eac174f2Safresh1 →  ←    U+FFEB, U+FFE9   HALFWIDTH RIGHT/LEFTWARDS ARROW
813eac174f2Safresh1 ��  ��    U+1D103, U+1D102 MUSICAL SYMBOL REVERSE FINAL BARLINE,  MUSICAL
814eac174f2Safresh1                          SYMBOL FINAL BARLINE
815eac174f2Safresh1 ��  ��    U+1D106, U+1D107 MUSICAL SYMBOL LEFT/RIGHT REPEAT SIGN
816eac174f2Safresh1 �� ��   U+1F449, U+1F448 WHITE RIGHT/LEFT POINTING BACKHAND INDEX
817eac174f2Safresh1 �� ��    U+1F508, U+1F568 SPEAKER,  RIGHT SPEAKER
818eac174f2Safresh1 �� ��    U+1F509, U+1F569 SPEAKER WITH ONE SOUND WAVE,  RIGHT SPEAKER WITH
819eac174f2Safresh1                          ONE SOUND WAVE
820eac174f2Safresh1 �� ��    U+1F50A, U+1F56A SPEAKER WITH THREE SOUND WAVES,  RIGHT SPEAKER
821eac174f2Safresh1                          WITH THREE SOUND WAVES
822eac174f2Safresh1 ��  ��    U+1F57B, U+1F57D LEFT/RIGHT HAND TELEPHONE RECEIVER
823eac174f2Safresh1 ��  ��    U+1F599, U+1F598 SIDEWAYS WHITE RIGHT/LEFT POINTING INDEX
824eac174f2Safresh1 ��  ��    U+1F59B, U+1F59A SIDEWAYS BLACK RIGHT/LEFT POINTING INDEX
825eac174f2Safresh1 ��  ��    U+1F59D, U+1F59C BLACK RIGHT/LEFT POINTING BACKHAND INDEX
826eac174f2Safresh1 ��  ��    U+1F5E6, U+1F5E7 THREE RAYS LEFT/RIGHT
827eac174f2Safresh1 ��  ��    U+1F802, U+1F800 RIGHT/LEFTWARDS ARROW WITH SMALL TRIANGLE
828eac174f2Safresh1                          ARROWHEAD
829eac174f2Safresh1 ��  ��    U+1F806, U+1F804 RIGHT/LEFTWARDS ARROW WITH MEDIUM TRIANGLE
830eac174f2Safresh1                          ARROWHEAD
831eac174f2Safresh1 ��  ��    U+1F80A, U+1F808 RIGHT/LEFTWARDS ARROW WITH LARGE TRIANGLE
832eac174f2Safresh1                          ARROWHEAD
833eac174f2Safresh1 ��  ��    U+1F812, U+1F810 RIGHT/LEFTWARDS ARROW WITH SMALL EQUILATERAL
834eac174f2Safresh1                          ARROWHEAD
835eac174f2Safresh1 ��  ��    U+1F816, U+1F814 RIGHT/LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
836eac174f2Safresh1 ��  ��    U+1F81A, U+1F818 HEAVY RIGHT/LEFTWARDS ARROW WITH EQUILATERAL
837eac174f2Safresh1                          ARROWHEAD
838eac174f2Safresh1 ��  ��    U+1F81E, U+1F81C HEAVY RIGHT/LEFTWARDS ARROW WITH LARGE
839eac174f2Safresh1                          EQUILATERAL ARROWHEAD
840eac174f2Safresh1 ��  ��    U+1F822, U+1F820 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
841eac174f2Safresh1                          NARROW SHAFT
842eac174f2Safresh1 ��  ��    U+1F826, U+1F824 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
843eac174f2Safresh1                          MEDIUM SHAFT
844eac174f2Safresh1 ��  ��    U+1F82A, U+1F828 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD
845eac174f2Safresh1                          SHAFT
846eac174f2Safresh1 ��  ��    U+1F82E, U+1F82C RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
847eac174f2Safresh1                          HEAVY SHAFT
848eac174f2Safresh1 ��  ��    U+1F832, U+1F830 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY
849eac174f2Safresh1                          HEAVY SHAFT
850eac174f2Safresh1 ��  ��    U+1F836, U+1F834 RIGHT/LEFTWARDS FINGER-POST ARROW
851eac174f2Safresh1 ��  ��    U+1F83A, U+1F838 RIGHT/LEFTWARDS SQUARED ARROW
852eac174f2Safresh1 ��  ��    U+1F83E, U+1F83C RIGHT/LEFTWARDS COMPRESSED ARROW
853eac174f2Safresh1 ��  ��    U+1F842, U+1F840 RIGHT/LEFTWARDS HEAVY COMPRESSED ARROW
854eac174f2Safresh1 ��  ��    U+1F846, U+1F844 RIGHT/LEFTWARDS HEAVY ARROW
855eac174f2Safresh1 ��  ��    U+1F852, U+1F850 RIGHT/LEFTWARDS SANS-SERIF ARROW
856eac174f2Safresh1 ��  ��    U+1F862, U+1F860 WIDE-HEADED RIGHT/LEFTWARDS LIGHT BARB ARROW
857eac174f2Safresh1 ��  ��    U+1F86A, U+1F868 WIDE-HEADED RIGHT/LEFTWARDS BARB ARROW
858eac174f2Safresh1 ��  ��    U+1F872, U+1F870 WIDE-HEADED RIGHT/LEFTWARDS MEDIUM BARB ARROW
859eac174f2Safresh1 ��  ��    U+1F87A, U+1F878 WIDE-HEADED RIGHT/LEFTWARDS HEAVY BARB ARROW
860eac174f2Safresh1 ��  ��    U+1F882, U+1F880 WIDE-HEADED RIGHT/LEFTWARDS VERY HEAVY BARB
861eac174f2Safresh1                          ARROW
862eac174f2Safresh1 ��  ��    U+1F892, U+1F890 RIGHT/LEFTWARDS TRIANGLE ARROWHEAD
863eac174f2Safresh1 ��  ��    U+1F896, U+1F894 RIGHT/LEFTWARDS WHITE ARROW WITHIN TRIANGLE
864eac174f2Safresh1                          ARROWHEAD
865eac174f2Safresh1 ��  ��    U+1F89A, U+1F898 RIGHT/LEFTWARDS ARROW WITH NOTCHED TAIL
866eac174f2Safresh1 ��  ��    U+1F8A1, U+1F8A0 RIGHTWARDS BOTTOM SHADED WHITE ARROW,
867eac174f2Safresh1                          LEFTWARDS BOTTOM-SHADED WHITE ARROW
868eac174f2Safresh1 ��  ��    U+1F8A3, U+1F8A2 RIGHT/LEFTWARDS TOP SHADED WHITE ARROW
869eac174f2Safresh1 ��  ��    U+1F8A5, U+1F8A6 RIGHT/LEFTWARDS RIGHT-SHADED WHITE ARROW
870eac174f2Safresh1 ��  ��    U+1F8A7, U+1F8A4 RIGHT/LEFTWARDS LEFT-SHADED WHITE ARROW
871eac174f2Safresh1 ��  ��    U+1F8A9, U+1F8A8 RIGHT/LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW
872eac174f2Safresh1 ��  ��    U+1F8AB, U+1F8AA RIGHT/LEFTWARDS FRONT-TILTED SHADOWED WHITE
873eac174f2Safresh1                          ARROW
874eac174f2Safresh1
875*e0680481Safresh1=head2 The 'module_true' feature
876*e0680481Safresh1
877*e0680481Safresh1This feature removes the need to return a true value at the end of a module
878*e0680481Safresh1loaded with C<require> or C<use>. Any errors during compilation will cause
879*e0680481Safresh1failures, but reaching the end of the module when this feature is in effect
880*e0680481Safresh1will prevent C<perl> from throwing an exception that the module "did not return
881*e0680481Safresh1a true value".
882*e0680481Safresh1
883*e0680481Safresh1=head2 The 'class' feature
884*e0680481Safresh1
885*e0680481Safresh1B<WARNING>: This feature is still experimental and the implementation may
886*e0680481Safresh1change or be removed in future versions of Perl.  For this reason, Perl will
887*e0680481Safresh1warn when you use the feature, unless you have explicitly disabled the warning:
888*e0680481Safresh1
889*e0680481Safresh1    no warnings "experimental::class";
890*e0680481Safresh1
891*e0680481Safresh1This feature enables the C<class> block syntax and other associated keywords
892*e0680481Safresh1which implement the "new" object system, previously codenamed "Corinna".
893*e0680481Safresh1
894850e2753Smillert=head1 FEATURE BUNDLES
895850e2753Smillert
896898184e3SsthenIt's possible to load multiple features together, using
897850e2753Smillerta I<feature bundle>.  The name of a feature bundle is prefixed with
898898184e3Ssthena colon, to distinguish it from an actual feature.
899850e2753Smillert
900898184e3Ssthen  use feature ":5.10";
901898184e3Ssthen
902898184e3SsthenThe following feature bundles are available:
903898184e3Ssthen
904898184e3Ssthen  bundle    features included
905898184e3Ssthen  --------- -----------------
906eac174f2Safresh1  :default  indirect multidimensional
907eac174f2Safresh1            bareword_filehandles
908898184e3Ssthen
909eac174f2Safresh1  :5.10     bareword_filehandles indirect
910eac174f2Safresh1            multidimensional say state switch
911898184e3Ssthen
912eac174f2Safresh1  :5.12     bareword_filehandles indirect
913eac174f2Safresh1            multidimensional say state switch
914eac174f2Safresh1            unicode_strings
915898184e3Ssthen
916eac174f2Safresh1  :5.14     bareword_filehandles indirect
917eac174f2Safresh1            multidimensional say state switch
918eac174f2Safresh1            unicode_strings
919898184e3Ssthen
920eac174f2Safresh1  :5.16     bareword_filehandles current_sub evalbytes
921eac174f2Safresh1            fc indirect multidimensional say state
922eac174f2Safresh1            switch unicode_eval unicode_strings
923898184e3Ssthen
924eac174f2Safresh1  :5.18     bareword_filehandles current_sub evalbytes
925eac174f2Safresh1            fc indirect multidimensional say state
926eac174f2Safresh1            switch unicode_eval unicode_strings
92791f110e0Safresh1
928eac174f2Safresh1  :5.20     bareword_filehandles current_sub evalbytes
929eac174f2Safresh1            fc indirect multidimensional say state
930eac174f2Safresh1            switch unicode_eval unicode_strings
9316fb12b70Safresh1
932eac174f2Safresh1  :5.22     bareword_filehandles current_sub evalbytes
933eac174f2Safresh1            fc indirect multidimensional say state
934eac174f2Safresh1            switch unicode_eval unicode_strings
935b8851fccSafresh1
936eac174f2Safresh1  :5.24     bareword_filehandles current_sub evalbytes
937eac174f2Safresh1            fc indirect multidimensional postderef_qq
938eac174f2Safresh1            say state switch unicode_eval
939eac174f2Safresh1            unicode_strings
940b8851fccSafresh1
941eac174f2Safresh1  :5.26     bareword_filehandles current_sub evalbytes
942eac174f2Safresh1            fc indirect multidimensional postderef_qq
943eac174f2Safresh1            say state switch unicode_eval
944eac174f2Safresh1            unicode_strings
9459f11ffb7Safresh1
946eac174f2Safresh1  :5.28     bareword_filehandles bitwise current_sub
947eac174f2Safresh1            evalbytes fc indirect multidimensional
948eac174f2Safresh1            postderef_qq say state switch unicode_eval
949eac174f2Safresh1            unicode_strings
9509f11ffb7Safresh1
951eac174f2Safresh1  :5.30     bareword_filehandles bitwise current_sub
952eac174f2Safresh1            evalbytes fc indirect multidimensional
953eac174f2Safresh1            postderef_qq say state switch unicode_eval
954eac174f2Safresh1            unicode_strings
95556d68f1eSafresh1
956eac174f2Safresh1  :5.32     bareword_filehandles bitwise current_sub
957eac174f2Safresh1            evalbytes fc indirect multidimensional
958eac174f2Safresh1            postderef_qq say state switch unicode_eval
959eac174f2Safresh1            unicode_strings
960eac174f2Safresh1
961eac174f2Safresh1  :5.34     bareword_filehandles bitwise current_sub
962eac174f2Safresh1            evalbytes fc indirect multidimensional
963eac174f2Safresh1            postderef_qq say state switch unicode_eval
964eac174f2Safresh1            unicode_strings
965eac174f2Safresh1
966eac174f2Safresh1  :5.36     bareword_filehandles bitwise current_sub
967eac174f2Safresh1            evalbytes fc isa postderef_qq say signatures
968eac174f2Safresh1            state unicode_eval unicode_strings
969b46d8ef2Safresh1
970*e0680481Safresh1  :5.38     bitwise current_sub evalbytes fc isa
971*e0680481Safresh1            module_true postderef_qq say signatures
972*e0680481Safresh1            state unicode_eval unicode_strings
973*e0680481Safresh1
974898184e3SsthenThe C<:default> bundle represents the feature set that is enabled before
975898184e3Ssthenany C<use feature> or C<no feature> declaration.
976898184e3Ssthen
977898184e3SsthenSpecifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
978898184e3Ssthenno effect.  Feature bundles are guaranteed to be the same for all sub-versions.
979898184e3Ssthen
980898184e3Ssthen  use feature ":5.14.0";    # same as ":5.14"
981898184e3Ssthen  use feature ":5.14.1";    # same as ":5.14"
982850e2753Smillert
983850e2753Smillert=head1 IMPLICIT LOADING
984850e2753Smillert
985898184e3SsthenInstead of loading feature bundles by name, it is easier to let Perl do
986898184e3Ssthenimplicit loading of a feature bundle for you.
987898184e3Ssthen
988850e2753SmillertThere are two ways to load the C<feature> pragma implicitly:
989850e2753Smillert
990850e2753Smillert=over 4
991850e2753Smillert
992850e2753Smillert=item *
993850e2753Smillert
994898184e3SsthenBy using the C<-E> switch on the Perl command-line instead of C<-e>.
995898184e3SsthenThat will enable the feature bundle for that version of Perl in the
996898184e3Ssthenmain compilation unit (that is, the one-liner that follows C<-E>).
997850e2753Smillert
998850e2753Smillert=item *
999850e2753Smillert
1000898184e3SsthenBy explicitly requiring a minimum Perl version number for your program, with
1001898184e3Ssthenthe C<use VERSION> construct.  That is,
1002850e2753Smillert
1003*e0680481Safresh1    use v5.36.0;
1004850e2753Smillert
1005850e2753Smillertwill do an implicit
1006850e2753Smillert
1007898184e3Ssthen    no feature ':all';
1008*e0680481Safresh1    use feature ':5.36';
1009850e2753Smillert
1010898184e3Ssthenand so on.  Note how the trailing sub-version
1011898184e3Ssthenis automatically stripped from the
101243003dfeSmillertversion.
1013850e2753Smillert
1014850e2753SmillertBut to avoid portability warnings (see L<perlfunc/use>), you may prefer:
1015850e2753Smillert
1016*e0680481Safresh1    use 5.036;
1017850e2753Smillert
1018850e2753Smillertwith the same effect.
1019850e2753Smillert
1020898184e3SsthenIf the required version is older than Perl 5.10, the ":default" feature
1021898184e3Ssthenbundle is automatically loaded instead.
1022898184e3Ssthen
10239f11ffb7Safresh1Unlike C<use feature ":5.12">, saying C<use v5.12> (or any higher version)
10249f11ffb7Safresh1also does the equivalent of C<use strict>; see L<perlfunc/use> for details.
10259f11ffb7Safresh1
1026850e2753Smillert=back
1027850e2753Smillert
1028eac174f2Safresh1=head1 CHECKING FEATURES
1029eac174f2Safresh1
1030eac174f2Safresh1C<feature> provides some simple APIs to check which features are enabled.
1031eac174f2Safresh1
1032eac174f2Safresh1These functions cannot be imported and must be called by their fully
1033eac174f2Safresh1qualified names.  If you don't otherwise need to set a feature you will
1034eac174f2Safresh1need to ensure C<feature> is loaded with:
1035eac174f2Safresh1
1036eac174f2Safresh1  use feature ();
1037eac174f2Safresh1
1038eac174f2Safresh1=over
1039eac174f2Safresh1
1040eac174f2Safresh1=item feature_enabled($feature)
1041eac174f2Safresh1
1042eac174f2Safresh1=item feature_enabled($feature, $depth)
1043eac174f2Safresh1
1044eac174f2Safresh1  package MyStandardEnforcer;
1045eac174f2Safresh1  use feature ();
1046eac174f2Safresh1  use Carp "croak";
1047eac174f2Safresh1  sub import {
1048eac174f2Safresh1    croak "disable indirect!" if feature::feature_enabled("indirect");
1049eac174f2Safresh1  }
1050eac174f2Safresh1
1051eac174f2Safresh1Test whether a named feature is enabled at a given level in the call
1052eac174f2Safresh1stack, returning a true value if it is.  C<$depth> defaults to 1,
1053eac174f2Safresh1which checks the scope that called the scope calling
1054eac174f2Safresh1feature::feature_enabled().
1055eac174f2Safresh1
1056eac174f2Safresh1croaks for an unknown feature name.
1057eac174f2Safresh1
1058eac174f2Safresh1=item features_enabled()
1059eac174f2Safresh1
1060eac174f2Safresh1=item features_enabled($depth)
1061eac174f2Safresh1
1062eac174f2Safresh1  package ReportEnabledFeatures;
1063eac174f2Safresh1  use feature "say";
1064eac174f2Safresh1  sub import {
1065eac174f2Safresh1    say STDERR join " ", feature::features_enabled();
1066eac174f2Safresh1  }
1067eac174f2Safresh1
1068eac174f2Safresh1Returns a list of the features enabled at a given level in the call
1069eac174f2Safresh1stack.  C<$depth> defaults to 1, which checks the scope that called
1070eac174f2Safresh1the scope calling feature::features_enabled().
1071eac174f2Safresh1
1072eac174f2Safresh1=item feature_bundle()
1073eac174f2Safresh1
1074eac174f2Safresh1=item feature_bundle($depth)
1075eac174f2Safresh1
1076eac174f2Safresh1Returns the feature bundle, if any, selected at a given level in the
1077eac174f2Safresh1call stack.  C<$depth> defaults to 1, which checks the scope that called
1078eac174f2Safresh1the scope calling feature::feature_bundle().
1079eac174f2Safresh1
1080eac174f2Safresh1Returns an undefined value if no feature bundle is selected in the
1081eac174f2Safresh1scope.
1082eac174f2Safresh1
1083eac174f2Safresh1The bundle name returned will be for the earliest bundle matching the
1084eac174f2Safresh1selected bundle, so:
1085eac174f2Safresh1
1086eac174f2Safresh1  use feature ();
1087eac174f2Safresh1  use v5.12;
1088eac174f2Safresh1  BEGIN { print feature::feature_bundle(0); }
1089eac174f2Safresh1
1090eac174f2Safresh1will print C<5.11>.
1091eac174f2Safresh1
1092eac174f2Safresh1This returns internal state, at this point C<use v5.12;> sets the
1093eac174f2Safresh1feature bundle, but C< use feature ":5.12"; > does not set the feature
1094eac174f2Safresh1bundle.  This may change in a future release of perl.
1095eac174f2Safresh1
1096eac174f2Safresh1=back
1097eac174f2Safresh1
1098850e2753Smillert=cut
1099850e2753Smillert
1100850e2753Smillertsub import {
1101b8851fccSafresh1    shift;
1102898184e3Ssthen
1103898184e3Ssthen    if (!@_) {
1104850e2753Smillert        croak("No features specified");
1105850e2753Smillert    }
1106898184e3Ssthen
1107898184e3Ssthen    __common(1, @_);
1108898184e3Ssthen}
1109898184e3Ssthen
1110898184e3Ssthensub unimport {
1111b8851fccSafresh1    shift;
1112898184e3Ssthen
1113898184e3Ssthen    # A bare C<no feature> should reset to the default bundle
1114898184e3Ssthen    if (!@_) {
1115898184e3Ssthen	$^H &= ~($hint_uni8bit|$hint_mask);
1116898184e3Ssthen	return;
1117898184e3Ssthen    }
1118898184e3Ssthen
1119898184e3Ssthen    __common(0, @_);
1120898184e3Ssthen}
1121898184e3Ssthen
1122898184e3Ssthen
1123898184e3Ssthensub __common {
1124898184e3Ssthen    my $import = shift;
1125898184e3Ssthen    my $bundle_number = $^H & $hint_mask;
1126898184e3Ssthen    my $features = $bundle_number != $hint_mask
1127898184e3Ssthen      && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
1128898184e3Ssthen    if ($features) {
1129898184e3Ssthen	# Features are enabled implicitly via bundle hints.
1130898184e3Ssthen	# Delete any keys that may be left over from last time.
1131898184e3Ssthen	delete @^H{ values(%feature) };
1132898184e3Ssthen	$^H |= $hint_mask;
1133898184e3Ssthen	for (@$features) {
1134898184e3Ssthen	    $^H{$feature{$_}} = 1;
1135898184e3Ssthen	    $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
1136898184e3Ssthen	}
1137898184e3Ssthen    }
1138850e2753Smillert    while (@_) {
1139898184e3Ssthen        my $name = shift;
1140850e2753Smillert        if (substr($name, 0, 1) eq ":") {
1141850e2753Smillert            my $v = substr($name, 1);
1142850e2753Smillert            if (!exists $feature_bundle{$v}) {
114343003dfeSmillert                $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
114443003dfeSmillert                if (!exists $feature_bundle{$v}) {
114543003dfeSmillert                    unknown_feature_bundle(substr($name, 1));
114643003dfeSmillert                }
1147850e2753Smillert            }
1148850e2753Smillert            unshift @_, @{$feature_bundle{$v}};
1149850e2753Smillert            next;
1150850e2753Smillert        }
1151850e2753Smillert        if (!exists $feature{$name}) {
11529f11ffb7Safresh1            if (exists $noops{$name}) {
11539f11ffb7Safresh1                next;
11549f11ffb7Safresh1            }
1155b46d8ef2Safresh1            if (!$import && exists $removed{$name}) {
1156b46d8ef2Safresh1                next;
1157b46d8ef2Safresh1            }
1158850e2753Smillert            unknown_feature($name);
1159850e2753Smillert        }
1160898184e3Ssthen	if ($import) {
1161850e2753Smillert	    $^H{$feature{$name}} = 1;
1162b39c5158Smillert	    $^H |= $hint_uni8bit if $name eq 'unicode_strings';
1163898184e3Ssthen	} else {
1164850e2753Smillert            delete $^H{$feature{$name}};
1165b39c5158Smillert            $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
1166850e2753Smillert        }
1167850e2753Smillert    }
1168850e2753Smillert}
1169850e2753Smillert
1170850e2753Smillertsub unknown_feature {
1171850e2753Smillert    my $feature = shift;
1172850e2753Smillert    croak(sprintf('Feature "%s" is not supported by Perl %vd',
1173850e2753Smillert            $feature, $^V));
1174850e2753Smillert}
1175850e2753Smillert
1176850e2753Smillertsub unknown_feature_bundle {
1177850e2753Smillert    my $feature = shift;
1178850e2753Smillert    croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
1179850e2753Smillert            $feature, $^V));
1180850e2753Smillert}
1181850e2753Smillert
1182850e2753Smillertsub croak {
1183850e2753Smillert    require Carp;
1184850e2753Smillert    Carp::croak(@_);
1185850e2753Smillert}
1186850e2753Smillert
1187eac174f2Safresh1sub features_enabled {
1188eac174f2Safresh1    my ($depth) = @_;
1189eac174f2Safresh1
1190eac174f2Safresh1    $depth //= 1;
1191eac174f2Safresh1    my @frame = caller($depth+1)
1192eac174f2Safresh1      or return;
1193eac174f2Safresh1    my ($hints, $hinthash) = @frame[8, 10];
1194eac174f2Safresh1
1195eac174f2Safresh1    my $bundle_number = $hints & $hint_mask;
1196eac174f2Safresh1    if ($bundle_number != $hint_mask) {
1197eac174f2Safresh1        return $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}->@*;
1198eac174f2Safresh1    }
1199eac174f2Safresh1    else {
1200eac174f2Safresh1        my @features;
1201eac174f2Safresh1        for my $feature (sort keys %feature) {
1202eac174f2Safresh1            if ($hinthash->{$feature{$feature}}) {
1203eac174f2Safresh1                push @features, $feature;
1204eac174f2Safresh1            }
1205eac174f2Safresh1        }
1206eac174f2Safresh1        return @features;
1207eac174f2Safresh1    }
1208eac174f2Safresh1}
1209eac174f2Safresh1
1210eac174f2Safresh1sub feature_enabled {
1211eac174f2Safresh1    my ($feature, $depth) = @_;
1212eac174f2Safresh1
1213eac174f2Safresh1    $depth //= 1;
1214eac174f2Safresh1    my @frame = caller($depth+1)
1215eac174f2Safresh1      or return;
1216eac174f2Safresh1    my ($hints, $hinthash) = @frame[8, 10];
1217eac174f2Safresh1
1218eac174f2Safresh1    my $hint_feature = $feature{$feature}
1219eac174f2Safresh1      or croak "Unknown feature $feature";
1220eac174f2Safresh1    my $bundle_number = $hints & $hint_mask;
1221eac174f2Safresh1    if ($bundle_number != $hint_mask) {
1222eac174f2Safresh1        my $bundle = $hint_bundles[$bundle_number >> $hint_shift];
1223eac174f2Safresh1        for my $bundle_feature ($feature_bundle{$bundle}->@*) {
1224eac174f2Safresh1            return 1 if $bundle_feature eq $feature;
1225eac174f2Safresh1        }
1226eac174f2Safresh1        return 0;
1227eac174f2Safresh1    }
1228eac174f2Safresh1    else {
1229eac174f2Safresh1        return $hinthash->{$hint_feature} // 0;
1230eac174f2Safresh1    }
1231eac174f2Safresh1}
1232eac174f2Safresh1
1233eac174f2Safresh1sub feature_bundle {
1234eac174f2Safresh1    my $depth = shift;
1235eac174f2Safresh1
1236eac174f2Safresh1    $depth //= 1;
1237eac174f2Safresh1    my @frame = caller($depth+1)
1238eac174f2Safresh1      or return;
1239eac174f2Safresh1    my $bundle_number = $frame[8] & $hint_mask;
1240eac174f2Safresh1    if ($bundle_number != $hint_mask) {
1241eac174f2Safresh1        return $hint_bundles[$bundle_number >> $hint_shift];
1242eac174f2Safresh1    }
1243eac174f2Safresh1    else {
1244eac174f2Safresh1        return undef;
1245eac174f2Safresh1    }
1246eac174f2Safresh1}
1247eac174f2Safresh1
1248850e2753Smillert1;
1249898184e3Ssthen
1250*e0680481Safresh1# ex: set ro ft=perl:
1251