summaryrefslogtreecommitdiff
path: root/systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm
diff options
context:
space:
mode:
Diffstat (limited to 'systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm')
-rw-r--r--systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm715
1 files changed, 658 insertions, 57 deletions
diff --git a/systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm b/systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm
index 5ebb4a3f78..4425225068 100644
--- a/systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm
+++ b/systems/texlive/tlnet/tlpkg/tlperl/lib/feature.pm
@@ -1,31 +1,34 @@
-# -*- buffer-read-only: t -*-
+# -*- mode: Perl; buffer-read-only: t -*-
# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file is built by regen/feature.pl.
# Any changes made here will be lost!
package feature;
-
-our $VERSION = '1.64';
+our $VERSION = '1.82';
our %feature = (
- fc => 'feature_fc',
- isa => 'feature_isa',
- say => 'feature_say',
- try => 'feature_try',
- state => 'feature_state',
- switch => 'feature_switch',
- bitwise => 'feature_bitwise',
- indirect => 'feature_indirect',
- evalbytes => 'feature_evalbytes',
- signatures => 'feature_signatures',
- current_sub => 'feature___SUB__',
- refaliasing => 'feature_refaliasing',
- postderef_qq => 'feature_postderef_qq',
- unicode_eval => 'feature_unieval',
- declared_refs => 'feature_myref',
- unicode_strings => 'feature_unicode',
- multidimensional => 'feature_multidimensional',
- bareword_filehandles => 'feature_bareword_filehandles',
+ fc => 'feature_fc',
+ isa => 'feature_isa',
+ say => 'feature_say',
+ try => 'feature_try',
+ class => 'feature_class',
+ defer => 'feature_defer',
+ state => 'feature_state',
+ switch => 'feature_switch',
+ bitwise => 'feature_bitwise',
+ indirect => 'feature_indirect',
+ evalbytes => 'feature_evalbytes',
+ signatures => 'feature_signatures',
+ current_sub => 'feature___SUB__',
+ module_true => 'feature_module_true',
+ refaliasing => 'feature_refaliasing',
+ postderef_qq => 'feature_postderef_qq',
+ unicode_eval => 'feature_unieval',
+ declared_refs => 'feature_myref',
+ unicode_strings => 'feature_unicode',
+ multidimensional => 'feature_multidimensional',
+ bareword_filehandles => 'feature_bareword_filehandles',
+ extra_paired_delimiters => 'feature_more_delims',
);
our %feature_bundle = (
@@ -34,7 +37,9 @@ our %feature_bundle = (
"5.15" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)],
"5.23" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
"5.27" => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
- "all" => [qw(bareword_filehandles bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)],
+ "5.35" => [qw(bareword_filehandles bitwise current_sub evalbytes fc isa postderef_qq say signatures state unicode_eval unicode_strings)],
+ "5.37" => [qw(bitwise current_sub evalbytes fc isa module_true postderef_qq say signatures state unicode_eval unicode_strings)],
+ "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)],
"default" => [qw(bareword_filehandles indirect multidimensional)],
);
@@ -58,6 +63,8 @@ $feature_bundle{"5.31"} = $feature_bundle{"5.27"};
$feature_bundle{"5.32"} = $feature_bundle{"5.27"};
$feature_bundle{"5.33"} = $feature_bundle{"5.27"};
$feature_bundle{"5.34"} = $feature_bundle{"5.27"};
+$feature_bundle{"5.36"} = $feature_bundle{"5.35"};
+$feature_bundle{"5.38"} = $feature_bundle{"5.37"};
$feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
my %noops = (
postderef => 1,
@@ -69,7 +76,7 @@ my %removed = (
our $hint_shift = 26;
our $hint_mask = 0x3c000000;
-our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 );
+our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 5.35 5.37 );
# This gets set (for now) in $^H as well as in %^H,
# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
@@ -79,6 +86,8 @@ our $hint_uni8bit = 0x00000800;
# TODO:
# - think about versioned features (use feature switch => 2)
+=encoding utf8
+
=head1 NAME
feature - Perl pragma to enable new features
@@ -92,13 +101,13 @@ feature - Perl pragma to enable new features
say "The case-folded version of $x is: " . fc $x;
- # set features to match the :5.10 bundle, which may turn off or on
- # multiple features (see below)
- use feature ':5.10';
+ # set features to match the :5.36 bundle, which may turn off or on
+ # multiple features (see "FEATURE BUNDLES" below)
+ use feature ':5.36';
- # implicitly loads :5.10 feature bundle
- use v5.10;
+ # implicitly loads :5.36 feature bundle
+ use v5.36;
=head1 DESCRIPTION
@@ -140,6 +149,8 @@ disable I<all> features (an unusual request!) use C<no feature ':all'>.
=head1 AVAILABLE FEATURES
+Read L</"FEATURE BUNDLES"> for the feature cheat sheet summary.
+
=head2 The 'say' feature
C<use feature 'say'> tells the compiler to enable the Raku-inspired
@@ -172,6 +183,9 @@ given/when construct.
See L<perlsyn/"Switch Statements"> for details.
This feature is available starting with Perl 5.10.
+It is deprecated starting with Perl 5.38, and using
+C<given>, C<when> or smartmatch will throw a warning.
+It will be removed in Perl 5.42.
=head2 The 'unicode_strings' feature
@@ -209,8 +223,8 @@ couldn't be changed without breaking some things that had come to rely on
them, so the feature can be enabled and disabled. Details are at
L<perlfunc/Under the "unicode_eval" feature>.
-C<evalbytes> is like string C<eval>, but operating on a byte stream that is
-not UTF-8 encoded. Details are at L<perlfunc/evalbytes EXPR>. Without a
+C<evalbytes> is like string C<eval>, but it treats its argument as a byte
+string. Details are at L<perlfunc/evalbytes EXPR>. Without a
S<C<use feature 'evalbytes'>> nor a S<C<use v5.16>> (or higher) declaration in
the current scope, you can still access it by instead writing
C<CORE::evalbytes>.
@@ -262,9 +276,10 @@ regardless of what feature declarations are in scope.
=head2 The 'postderef' and 'postderef_qq' features
The 'postderef_qq' feature extends the applicability of L<postfix
-dereference syntax|perlref/Postfix Dereference Syntax> so that postfix array
-and scalar dereference are available in double-quotish interpolations. For
-example, it makes the following two statements equivalent:
+dereference syntax|perlref/Postfix Dereference Syntax> so that
+postfix array dereference, postfix scalar dereference, and
+postfix array highest index access are available in double-quotish interpolations.
+For example, it makes the following two statements equivalent:
my $s = "[@{ $h->{a} }]";
my $s = "[$h->{a}->@*]";
@@ -288,22 +303,27 @@ regardless of what feature declarations are in scope.
=head2 The 'signatures' feature
-B<WARNING>: This feature is still experimental and the implementation may
-change or be removed in future versions of Perl. For this reason, Perl will
-warn when you use the feature, unless you have explicitly disabled the warning:
-
- no warnings "experimental::signatures";
-
-This enables unpacking of subroutine arguments into lexical variables
-by syntax such as
+This enables syntax for declaring subroutine arguments as lexical variables.
+For example, for this subroutine:
sub foo ($left, $right) {
- return $left + $right;
+ return $left + $right;
}
+Calling C<foo(3, 7)> will assign C<3> into C<$left> and C<7> into C<$right>.
+
See L<perlsub/Signatures> for details.
-This feature is available from Perl 5.20 onwards.
+This feature is available from Perl 5.20 onwards. From Perl 5.20 to 5.34,
+it was classed as experimental, and Perl emitted a warning for its usage,
+except when explicitly disabled:
+
+ no warnings "experimental::signatures";
+
+As of Perl 5.36, use of this feature no longer triggers a warning, though the
+C<experimental::signatures> warning category still exists (for compatibility
+with code that disables it). This feature is now considered stable, and is
+enabled automatically by C<use v5.36> (or higher).
=head2 The 'refaliasing' feature
@@ -350,7 +370,7 @@ warn when you use the feature, unless you have explicitly disabled the warning:
no warnings "experimental::declared_refs";
This allows a reference to a variable to be declared with C<my>, C<state>,
-our C<our>, or localized with C<local>. It is intended mainly for use in
+or C<our>, or localized with C<local>. It is intended mainly for use in
conjunction with the "refaliasing" feature. See L<perlref/Declaring a
Reference to a Variable> for examples.
@@ -358,17 +378,20 @@ This feature is available from Perl 5.26 onwards.
=head2 The 'isa' feature
-B<WARNING>: This feature is still experimental and the implementation may
-change or be removed in future versions of Perl. For this reason, Perl will
-warn when you use the feature, unless you have explicitly disabled the warning:
-
- no warnings "experimental::isa";
-
This allows the use of the C<isa> infix operator, which tests whether the
scalar given by the left operand is an object of the class given by the
right operand. See L<perlop/Class Instance Operator> for more details.
-This feature is available from Perl 5.32 onwards.
+This feature is available from Perl 5.32 onwards. From Perl 5.32 to 5.34,
+it was classed as experimental, and Perl emitted a warning for its usage,
+except when explicitly disabled:
+
+ no warnings "experimental::isa";
+
+As of Perl 5.36, use of this feature no longer triggers a warning (though the
+C<experimental::isa> warning category stilll exists for compatibility with
+code that disables it). This feature is now considered stable, and is enabled
+automatically by C<use v5.36> (or higher).
=head2 The 'indirect' feature
@@ -399,7 +422,7 @@ previous versions, it was simply on all the time.
You can use the L<multidimensional> module on CPAN to disable
multidimensional array emulation for older versions of Perl.
-=head2 The 'bareword_filehandles' feature.
+=head2 The 'bareword_filehandles' feature
This feature enables bareword filehandles for builtin functions
operations, a generally discouraged practice. It is enabled by
@@ -415,7 +438,7 @@ previous versions it was simply on all the time.
You can use the L<bareword::filehandles> module on CPAN to disable
bareword filehandles for older versions of perl.
-=head2 The 'try' feature.
+=head2 The 'try' feature
B<WARNING>: This feature is still experimental and the implementation may
change or be removed in future versions of Perl. For this reason, Perl will
@@ -429,6 +452,445 @@ C<try> are caught by executing the body of the C<catch> block.
For more information, see L<perlsyn/"Try Catch Exception Handling">.
+=head2 The 'defer' feature
+
+B<WARNING>: This feature is still experimental and the implementation may
+change or be removed in future versions of Perl. For this reason, Perl will
+warn when you use the feature, unless you have explicitly disabled the warning:
+
+ no warnings "experimental::defer";
+
+This feature enables the C<defer> block syntax, which allows a block of code
+to be deferred until when the flow of control leaves the block which contained
+it. For more details, see L<perlsyn/defer>.
+
+=head2 The 'extra_paired_delimiters' feature
+
+B<WARNING>: This feature is still experimental and the implementation may
+change or be removed in future versions of Perl. For this reason, Perl will
+warn when you use the feature, unless you have explicitly disabled the warning:
+
+ no warnings "experimental::extra_paired_delimiters";
+
+This feature enables the use of more paired string delimiters than the
+traditional four, S<C<< < > >>>, S<C<( )>>, S<C<{ }>>, and S<C<[ ]>>. When
+this feature is on, for example, you can say S<C<qrE<171>patE<187>>>.
+
+As with any usage of non-ASCII delimiters in a UTF-8-encoded source file, you
+will want to ensure the parser will decode the source code from UTF-8 bytes
+with a declaration such as C<use utf8>.
+
+This feature is available starting in Perl 5.36.
+
+The complete list of accepted paired delimiters as of Unicode 14.0 is:
+
+ ( ) U+0028, U+0029 LEFT/RIGHT PARENTHESIS
+ < > U+003C, U+003E LESS-THAN/GREATER-THAN SIGN
+ [ ] U+005B, U+005D LEFT/RIGHT SQUARE BRACKET
+ { } U+007B, U+007D LEFT/RIGHT CURLY BRACKET
+ « » U+00AB, U+00BB LEFT/RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ » « U+00BB, U+00AB RIGHT/LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ܆ ܇ U+0706, U+0707 SYRIAC COLON SKEWED LEFT/RIGHT
+ ༺ ༻ U+0F3A, U+0F3B TIBETAN MARK GUG RTAGS GYON, TIBETAN MARK GUG
+ RTAGS GYAS
+ ༼ ༽ U+0F3C, U+0F3D TIBETAN MARK ANG KHANG GYON, TIBETAN MARK ANG
+ KHANG GYAS
+ ᚛ ᚜ U+169B, U+169C OGHAM FEATHER MARK, OGHAM REVERSED FEATHER MARK
+ ‘ ’ U+2018, U+2019 LEFT/RIGHT SINGLE QUOTATION MARK
+ ’ ‘ U+2019, U+2018 RIGHT/LEFT SINGLE QUOTATION MARK
+ “ ” U+201C, U+201D LEFT/RIGHT DOUBLE QUOTATION MARK
+ ” “ U+201D, U+201C RIGHT/LEFT DOUBLE QUOTATION MARK
+ ‵ ′ U+2035, U+2032 REVERSED PRIME, PRIME
+ ‶ ″ U+2036, U+2033 REVERSED DOUBLE PRIME, DOUBLE PRIME
+ ‷ ‴ U+2037, U+2034 REVERSED TRIPLE PRIME, TRIPLE PRIME
+ ‹ › U+2039, U+203A SINGLE LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
+ › ‹ U+203A, U+2039 SINGLE RIGHT/LEFT-POINTING ANGLE QUOTATION MARK
+ ⁅ ⁆ U+2045, U+2046 LEFT/RIGHT SQUARE BRACKET WITH QUILL
+ ⁍ ⁌ U+204D, U+204C BLACK RIGHT/LEFTWARDS BULLET
+ ⁽ ⁾ U+207D, U+207E SUPERSCRIPT LEFT/RIGHT PARENTHESIS
+ ₍ ₎ U+208D, U+208E SUBSCRIPT LEFT/RIGHT PARENTHESIS
+ → ← U+2192, U+2190 RIGHT/LEFTWARDS ARROW
+ ↛ ↚ U+219B, U+219A RIGHT/LEFTWARDS ARROW WITH STROKE
+ ↝ ↜ U+219D, U+219C RIGHT/LEFTWARDS WAVE ARROW
+ ↠ ↞ U+21A0, U+219E RIGHT/LEFTWARDS TWO HEADED ARROW
+ ↣ ↢ U+21A3, U+21A2 RIGHT/LEFTWARDS ARROW WITH TAIL
+ ↦ ↤ U+21A6, U+21A4 RIGHT/LEFTWARDS ARROW FROM BAR
+ ↪ ↩ U+21AA, U+21A9 RIGHT/LEFTWARDS ARROW WITH HOOK
+ ↬ ↫ U+21AC, U+21AB RIGHT/LEFTWARDS ARROW WITH LOOP
+ ↱ ↰ U+21B1, U+21B0 UPWARDS ARROW WITH TIP RIGHT/LEFTWARDS
+ ↳ ↲ U+21B3, U+21B2 DOWNWARDS ARROW WITH TIP RIGHT/LEFTWARDS
+ ⇀ ↼ U+21C0, U+21BC RIGHT/LEFTWARDS HARPOON WITH BARB UPWARDS
+ ⇁ ↽ U+21C1, U+21BD RIGHT/LEFTWARDS HARPOON WITH BARB DOWNWARDS
+ ⇉ ⇇ U+21C9, U+21C7 RIGHT/LEFTWARDS PAIRED ARROWS
+ ⇏ ⇍ U+21CF, U+21CD RIGHT/LEFTWARDS DOUBLE ARROW WITH STROKE
+ ⇒ ⇐ U+21D2, U+21D0 RIGHT/LEFTWARDS DOUBLE ARROW
+ ⇛ ⇚ U+21DB, U+21DA RIGHT/LEFTWARDS TRIPLE ARROW
+ ⇝ ⇜ U+21DD, U+21DC RIGHT/LEFTWARDS SQUIGGLE ARROW
+ ⇢ ⇠ U+21E2, U+21E0 RIGHT/LEFTWARDS DASHED ARROW
+ ⇥ ⇤ U+21E5, U+21E4 RIGHT/LEFTWARDS ARROW TO BAR
+ ⇨ ⇦ U+21E8, U+21E6 RIGHT/LEFTWARDS WHITE ARROW
+ ⇴ ⬰ U+21F4, U+2B30 RIGHT/LEFT ARROW WITH SMALL CIRCLE
+ ⇶ ⬱ U+21F6, U+2B31 THREE RIGHT/LEFTWARDS ARROWS
+ ⇸ ⇷ U+21F8, U+21F7 RIGHT/LEFTWARDS ARROW WITH VERTICAL STROKE
+ ⇻ ⇺ U+21FB, U+21FA RIGHT/LEFTWARDS ARROW WITH DOUBLE VERTICAL
+ STROKE
+ ⇾ ⇽ U+21FE, U+21FD RIGHT/LEFTWARDS OPEN-HEADED ARROW
+ ∈ ∋ U+2208, U+220B ELEMENT OF, CONTAINS AS MEMBER
+ ∉ ∌ U+2209, U+220C NOT AN ELEMENT OF, DOES NOT CONTAIN AS MEMBER
+ ∊ ∍ U+220A, U+220D SMALL ELEMENT OF, SMALL CONTAINS AS MEMBER
+ ≤ ≥ U+2264, U+2265 LESS-THAN/GREATER-THAN OR EQUAL TO
+ ≦ ≧ U+2266, U+2267 LESS-THAN/GREATER-THAN OVER EQUAL TO
+ ≨ ≩ U+2268, U+2269 LESS-THAN/GREATER-THAN BUT NOT EQUAL TO
+ ≪ ≫ U+226A, U+226B MUCH LESS-THAN/GREATER-THAN
+ ≮ ≯ U+226E, U+226F NOT LESS-THAN/GREATER-THAN
+ ≰ ≱ U+2270, U+2271 NEITHER LESS-THAN/GREATER-THAN NOR EQUAL TO
+ ≲ ≳ U+2272, U+2273 LESS-THAN/GREATER-THAN OR EQUIVALENT TO
+ ≴ ≵ U+2274, U+2275 NEITHER LESS-THAN/GREATER-THAN NOR EQUIVALENT TO
+ ≺ ≻ U+227A, U+227B PRECEDES/SUCCEEDS
+ ≼ ≽ U+227C, U+227D PRECEDES/SUCCEEDS OR EQUAL TO
+ ≾ ≿ U+227E, U+227F PRECEDES/SUCCEEDS OR EQUIVALENT TO
+ ⊀ ⊁ U+2280, U+2281 DOES NOT PRECEDE/SUCCEED
+ ⊂ ⊃ U+2282, U+2283 SUBSET/SUPERSET OF
+ ⊄ ⊅ U+2284, U+2285 NOT A SUBSET/SUPERSET OF
+ ⊆ ⊇ U+2286, U+2287 SUBSET/SUPERSET OF OR EQUAL TO
+ ⊈ ⊉ U+2288, U+2289 NEITHER A SUBSET/SUPERSET OF NOR EQUAL TO
+ ⊊ ⊋ U+228A, U+228B SUBSET/SUPERSET OF WITH NOT EQUAL TO
+ ⊣ ⊢ U+22A3, U+22A2 LEFT/RIGHT TACK
+ ⊦ ⫞ U+22A6, U+2ADE ASSERTION, SHORT LEFT TACK
+ ⊨ ⫤ U+22A8, U+2AE4 TRUE, VERTICAL BAR DOUBLE LEFT TURNSTILE
+ ⊩ ⫣ U+22A9, U+2AE3 FORCES, DOUBLE VERTICAL BAR LEFT TURNSTILE
+ ⊰ ⊱ U+22B0, U+22B1 PRECEDES/SUCCEEDS UNDER RELATION
+ ⋐ ⋑ U+22D0, U+22D1 DOUBLE SUBSET/SUPERSET
+ ⋖ ⋗ U+22D6, U+22D7 LESS-THAN/GREATER-THAN WITH DOT
+ ⋘ ⋙ U+22D8, U+22D9 VERY MUCH LESS-THAN/GREATER-THAN
+ ⋜ ⋝ U+22DC, U+22DD EQUAL TO OR LESS-THAN/GREATER-THAN
+ ⋞ ⋟ U+22DE, U+22DF EQUAL TO OR PRECEDES/SUCCEEDS
+ ⋠ ⋡ U+22E0, U+22E1 DOES NOT PRECEDE/SUCCEED OR EQUAL
+ ⋦ ⋧ U+22E6, U+22E7 LESS-THAN/GREATER-THAN BUT NOT EQUIVALENT TO
+ ⋨ ⋩ U+22E8, U+22E9 PRECEDES/SUCCEEDS BUT NOT EQUIVALENT TO
+ ⋲ ⋺ U+22F2, U+22FA ELEMENT OF/CONTAINS WITH LONG HORIZONTAL STROKE
+ ⋳ ⋻ U+22F3, U+22FB ELEMENT OF/CONTAINS WITH VERTICAL BAR AT END OF
+ HORIZONTAL STROKE
+ ⋴ ⋼ U+22F4, U+22FC SMALL ELEMENT OF/CONTAINS WITH VERTICAL BAR AT
+ END OF HORIZONTAL STROKE
+ ⋶ ⋽ U+22F6, U+22FD ELEMENT OF/CONTAINS WITH OVERBAR
+ ⋷ ⋾ U+22F7, U+22FE SMALL ELEMENT OF/CONTAINS WITH OVERBAR
+ ⌈ ⌉ U+2308, U+2309 LEFT/RIGHT CEILING
+ ⌊ ⌋ U+230A, U+230B LEFT/RIGHT FLOOR
+ ⌦ ⌫ U+2326, U+232B ERASE TO THE RIGHT/LEFT
+ 〈 〉 U+2329, U+232A LEFT/RIGHT-POINTING ANGLE BRACKET
+ ⍈ ⍇ U+2348, U+2347 APL FUNCTIONAL SYMBOL QUAD RIGHT/LEFTWARDS ARROW
+ ⏩ ⏪ U+23E9, U+23EA BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE
+ ⏭ ⏮ U+23ED, U+23EE BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE WITH
+ VERTICAL BAR
+ ☛ ☚ U+261B, U+261A BLACK RIGHT/LEFT POINTING INDEX
+ ☞ ☜ U+261E, U+261C WHITE RIGHT/LEFT POINTING INDEX
+ ⚞ ⚟ U+269E, U+269F THREE LINES CONVERGING RIGHT/LEFT
+ ❨ ❩ U+2768, U+2769 MEDIUM LEFT/RIGHT PARENTHESIS ORNAMENT
+ ❪ ❫ U+276A, U+276B MEDIUM FLATTENED LEFT/RIGHT PARENTHESIS ORNAMENT
+ ❬ ❭ U+276C, U+276D MEDIUM LEFT/RIGHT-POINTING ANGLE BRACKET
+ ORNAMENT
+ ❮ ❯ U+276E, U+276F HEAVY LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
+ ORNAMENT
+ ❰ ❱ U+2770, U+2771 HEAVY LEFT/RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ ❲ ❳ U+2772, U+2773 LIGHT LEFT/RIGHT TORTOISE SHELL BRACKET ORNAMENT
+ ❴ ❵ U+2774, U+2775 MEDIUM LEFT/RIGHT CURLY BRACKET ORNAMENT
+ ⟃ ⟄ U+27C3, U+27C4 OPEN SUBSET/SUPERSET
+ ⟅ ⟆ U+27C5, U+27C6 LEFT/RIGHT S-SHAPED BAG DELIMITER
+ ⟈ ⟉ U+27C8, U+27C9 REVERSE SOLIDUS PRECEDING SUBSET, SUPERSET
+ PRECEDING SOLIDUS
+ ⟞ ⟝ U+27DE, U+27DD LONG LEFT/RIGHT TACK
+ ⟦ ⟧ U+27E6, U+27E7 MATHEMATICAL LEFT/RIGHT WHITE SQUARE BRACKET
+ ⟨ ⟩ U+27E8, U+27E9 MATHEMATICAL LEFT/RIGHT ANGLE BRACKET
+ ⟪ ⟫ U+27EA, U+27EB MATHEMATICAL LEFT/RIGHT DOUBLE ANGLE BRACKET
+ ⟬ ⟭ U+27EC, U+27ED MATHEMATICAL LEFT/RIGHT WHITE TORTOISE SHELL
+ BRACKET
+ ⟮ ⟯ U+27EE, U+27EF MATHEMATICAL LEFT/RIGHT FLATTENED PARENTHESIS
+ ⟴ ⬲ U+27F4, U+2B32 RIGHT/LEFT ARROW WITH CIRCLED PLUS
+ ⟶ ⟵ U+27F6, U+27F5 LONG RIGHT/LEFTWARDS ARROW
+ ⟹ ⟸ U+27F9, U+27F8 LONG RIGHT/LEFTWARDS DOUBLE ARROW
+ ⟼ ⟻ U+27FC, U+27FB LONG RIGHT/LEFTWARDS ARROW FROM BAR
+ ⟾ ⟽ U+27FE, U+27FD LONG RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR
+ ⟿ ⬳ U+27FF, U+2B33 LONG RIGHT/LEFTWARDS SQUIGGLE ARROW
+ ⤀ ⬴ U+2900, U+2B34 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH VERTICAL
+ STROKE
+ ⤁ ⬵ U+2901, U+2B35 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH DOUBLE
+ VERTICAL STROKE
+ ⤃ ⤂ U+2903, U+2902 RIGHT/LEFTWARDS DOUBLE ARROW WITH VERTICAL
+ STROKE
+ ⤅ ⬶ U+2905, U+2B36 RIGHT/LEFTWARDS TWO-HEADED ARROW FROM BAR
+ ⤇ ⤆ U+2907, U+2906 RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR
+ ⤍ ⤌ U+290D, U+290C RIGHT/LEFTWARDS DOUBLE DASH ARROW
+ ⤏ ⤎ U+290F, U+290E RIGHT/LEFTWARDS TRIPLE DASH ARROW
+ ⤐ ⬷ U+2910, U+2B37 RIGHT/LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
+ ⤑ ⬸ U+2911, U+2B38 RIGHT/LEFTWARDS ARROW WITH DOTTED STEM
+ ⤔ ⬹ U+2914, U+2B39 RIGHT/LEFTWARDS ARROW WITH TAIL WITH VERTICAL
+ STROKE
+ ⤕ ⬺ U+2915, U+2B3A RIGHT/LEFTWARDS ARROW WITH TAIL WITH DOUBLE
+ VERTICAL STROKE
+ ⤖ ⬻ U+2916, U+2B3B RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL
+ ⤗ ⬼ U+2917, U+2B3C RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH
+ VERTICAL STROKE
+ ⤘ ⬽ U+2918, U+2B3D RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH
+ DOUBLE VERTICAL STROKE
+ ⤚ ⤙ U+291A, U+2919 RIGHT/LEFTWARDS ARROW-TAIL
+ ⤜ ⤛ U+291C, U+291B RIGHT/LEFTWARDS DOUBLE ARROW-TAIL
+ ⤞ ⤝ U+291E, U+291D RIGHT/LEFTWARDS ARROW TO BLACK DIAMOND
+ ⤠ ⤟ U+2920, U+291F RIGHT/LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+ ⤳ ⬿ U+2933, U+2B3F WAVE ARROW POINTING DIRECTLY RIGHT/LEFT
+ ⤷ ⤶ U+2937, U+2936 ARROW POINTING DOWNWARDS THEN CURVING RIGHT/
+ LEFTWARDS
+ ⥅ ⥆ U+2945, U+2946 RIGHT/LEFTWARDS ARROW WITH PLUS BELOW
+ ⥇ ⬾ U+2947, U+2B3E RIGHT/LEFTWARDS ARROW THROUGH X
+ ⥓ ⥒ U+2953, U+2952 RIGHT/LEFTWARDS HARPOON WITH BARB UP TO BAR
+ ⥗ ⥖ U+2957, U+2956 RIGHT/LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+ ⥛ ⥚ U+295B, U+295A RIGHT/LEFTWARDS HARPOON WITH BARB UP FROM BAR
+ ⥟ ⥞ U+295F, U+295E RIGHT/LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+ ⥤ ⥢ U+2964, U+2962 RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE
+ RIGHT/LEFTWARDS HARPOON WITH BARB DOWN
+ ⥬ ⥪ U+296C, U+296A RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE LONG
+ DASH
+ ⥭ ⥫ U+296D, U+296B RIGHT/LEFTWARDS HARPOON WITH BARB DOWN BELOW
+ LONG DASH
+ ⥱ ⭀ U+2971, U+2B40 EQUALS SIGN ABOVE RIGHT/LEFTWARDS ARROW
+ ⥲ ⭁ U+2972, U+2B41 TILDE OPERATOR ABOVE RIGHTWARDS ARROW, REVERSE
+ TILDE OPERATOR ABOVE LEFTWARDS ARROW
+ ⥴ ⭋ U+2974, U+2B4B RIGHTWARDS ARROW ABOVE TILDE OPERATOR,
+ LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+ ⥵ ⭂ U+2975, U+2B42 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO,
+ LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+ ⥹ ⥻ U+2979, U+297B SUBSET/SUPERSET ABOVE RIGHT/LEFTWARDS ARROW
+ ⦃ ⦄ U+2983, U+2984 LEFT/RIGHT WHITE CURLY BRACKET
+ ⦅ ⦆ U+2985, U+2986 LEFT/RIGHT WHITE PARENTHESIS
+ ⦇ ⦈ U+2987, U+2988 Z NOTATION LEFT/RIGHT IMAGE BRACKET
+ ⦉ ⦊ U+2989, U+298A Z NOTATION LEFT/RIGHT BINDING BRACKET
+ ⦋ ⦌ U+298B, U+298C LEFT/RIGHT SQUARE BRACKET WITH UNDERBAR
+ ⦍ ⦐ U+298D, U+2990 LEFT/RIGHT SQUARE BRACKET WITH TICK IN TOP
+ CORNER
+ ⦏ ⦎ U+298F, U+298E LEFT/RIGHT SQUARE BRACKET WITH TICK IN BOTTOM
+ CORNER
+ ⦑ ⦒ U+2991, U+2992 LEFT/RIGHT ANGLE BRACKET WITH DOT
+ ⦓ ⦔ U+2993, U+2994 LEFT/RIGHT ARC LESS-THAN/GREATER-THAN BRACKET
+ ⦕ ⦖ U+2995, U+2996 DOUBLE LEFT/RIGHT ARC GREATER-THAN/LESS-THAN
+ BRACKET
+ ⦗ ⦘ U+2997, U+2998 LEFT/RIGHT BLACK TORTOISE SHELL BRACKET
+ ⦨ ⦩ U+29A8, U+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW
+ POINTING UP AND RIGHT/LEFT
+ ⦪ ⦫ U+29AA, U+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW
+ POINTING DOWN AND RIGHT/LEFT
+ ⦳ ⦴ U+29B3, U+29B4 EMPTY SET WITH RIGHT/LEFT ARROW ABOVE
+ ⧀ ⧁ U+29C0, U+29C1 CIRCLED LESS-THAN/GREATER-THAN
+ ⧘ ⧙ U+29D8, U+29D9 LEFT/RIGHT WIGGLY FENCE
+ ⧚ ⧛ U+29DA, U+29DB LEFT/RIGHT DOUBLE WIGGLY FENCE
+ ⧼ ⧽ U+29FC, U+29FD LEFT/RIGHT-POINTING CURVED ANGLE BRACKET
+ ⩹ ⩺ U+2A79, U+2A7A LESS-THAN/GREATER-THAN WITH CIRCLE INSIDE
+ ⩻ ⩼ U+2A7B, U+2A7C LESS-THAN/GREATER-THAN WITH QUESTION MARK ABOVE
+ ⩽ ⩾ U+2A7D, U+2A7E LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO
+ ⩿ ⪀ U+2A7F, U+2A80 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
+ DOT INSIDE
+ ⪁ ⪂ U+2A81, U+2A82 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
+ DOT ABOVE
+ ⪃ ⪄ U+2A83, U+2A84 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
+ DOT ABOVE RIGHT/LEFT
+ ⪅ ⪆ U+2A85, U+2A86 LESS-THAN/GREATER-THAN OR APPROXIMATE
+ ⪇ ⪈ U+2A87, U+2A88 LESS-THAN/GREATER-THAN AND SINGLE-LINE NOT
+ EQUAL TO
+ ⪉ ⪊ U+2A89, U+2A8A LESS-THAN/GREATER-THAN AND NOT APPROXIMATE
+ ⪍ ⪎ U+2A8D, U+2A8E LESS-THAN/GREATER-THAN ABOVE SIMILAR OR EQUAL
+ ⪕ ⪖ U+2A95, U+2A96 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN
+ ⪗ ⪘ U+2A97, U+2A98 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN WITH
+ DOT INSIDE
+ ⪙ ⪚ U+2A99, U+2A9A DOUBLE-LINE EQUAL TO OR LESS-THAN/GREATER-THAN
+ ⪛ ⪜ U+2A9B, U+2A9C DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/
+ GREATER-THAN
+ ⪝ ⪞ U+2A9D, U+2A9E SIMILAR OR LESS-THAN/GREATER-THAN
+ ⪟ ⪠ U+2A9F, U+2AA0 SIMILAR ABOVE LESS-THAN/GREATER-THAN ABOVE
+ EQUALS SIGN
+ ⪡ ⪢ U+2AA1, U+2AA2 DOUBLE NESTED LESS-THAN/GREATER-THAN
+ ⪦ ⪧ U+2AA6, U+2AA7 LESS-THAN/GREATER-THAN CLOSED BY CURVE
+ ⪨ ⪩ U+2AA8, U+2AA9 LESS-THAN/GREATER-THAN CLOSED BY CURVE ABOVE
+ SLANTED EQUAL
+ ⪪ ⪫ U+2AAA, U+2AAB SMALLER THAN/LARGER THAN
+ ⪬ ⪭ U+2AAC, U+2AAD SMALLER THAN/LARGER THAN OR EQUAL TO
+ ⪯ ⪰ U+2AAF, U+2AB0 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+ ⪱ ⪲ U+2AB1, U+2AB2 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+ ⪳ ⪴ U+2AB3, U+2AB4 PRECEDES/SUCCEEDS ABOVE EQUALS SIGN
+ ⪵ ⪶ U+2AB5, U+2AB6 PRECEDES/SUCCEEDS ABOVE NOT EQUAL TO
+ ⪷ ⪸ U+2AB7, U+2AB8 PRECEDES/SUCCEEDS ABOVE ALMOST EQUAL TO
+ ⪹ ⪺ U+2AB9, U+2ABA PRECEDES/SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+ ⪻ ⪼ U+2ABB, U+2ABC DOUBLE PRECEDES/SUCCEEDS
+ ⪽ ⪾ U+2ABD, U+2ABE SUBSET/SUPERSET WITH DOT
+ ⪿ ⫀ U+2ABF, U+2AC0 SUBSET/SUPERSET WITH PLUS SIGN BELOW
+ ⫁ ⫂ U+2AC1, U+2AC2 SUBSET/SUPERSET WITH MULTIPLICATION SIGN BELOW
+ ⫃ ⫄ U+2AC3, U+2AC4 SUBSET/SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+ ⫅ ⫆ U+2AC5, U+2AC6 SUBSET/SUPERSET OF ABOVE EQUALS SIGN
+ ⫇ ⫈ U+2AC7, U+2AC8 SUBSET/SUPERSET OF ABOVE TILDE OPERATOR
+ ⫉ ⫊ U+2AC9, U+2ACA SUBSET/SUPERSET OF ABOVE ALMOST EQUAL TO
+ ⫋ ⫌ U+2ACB, U+2ACC SUBSET/SUPERSET OF ABOVE NOT EQUAL TO
+ ⫏ ⫐ U+2ACF, U+2AD0 CLOSED SUBSET/SUPERSET
+ ⫑ ⫒ U+2AD1, U+2AD2 CLOSED SUBSET/SUPERSET OR EQUAL TO
+ ⫕ ⫖ U+2AD5, U+2AD6 SUBSET/SUPERSET ABOVE SUBSET/SUPERSET
+ ⫥ ⊫ U+2AE5, U+22AB DOUBLE VERTICAL BAR DOUBLE LEFT/RIGHT TURNSTILE
+ ⫷ ⫸ U+2AF7, U+2AF8 TRIPLE NESTED LESS-THAN/GREATER-THAN
+ ⫹ ⫺ U+2AF9, U+2AFA DOUBLE-LINE SLANTED LESS-THAN/GREATER-THAN OR
+ EQUAL TO
+ ⭆ ⭅ U+2B46, U+2B45 RIGHT/LEFTWARDS QUADRUPLE ARROW
+ ⭇ ⭉ U+2B47, U+2B49 REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW,
+ TILDE OPERATOR ABOVE LEFTWARDS ARROW
+ ⭈ ⭊ U+2B48, U+2B4A RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL
+ TO, LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
+ ⭌ ⥳ U+2B4C, U+2973 RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR,
+ LEFTWARDS ARROW ABOVE TILDE OPERATOR
+ ⭢ ⭠ U+2B62, U+2B60 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW
+ ⭬ ⭪ U+2B6C, U+2B6A RIGHT/LEFTWARDS TRIANGLE-HEADED DASHED ARROW
+ ⭲ ⭰ U+2B72, U+2B70 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
+ ⭼ ⭺ U+2B7C, U+2B7A RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
+ DOUBLE VERTICAL STROKE
+ ⮆ ⮄ U+2B86, U+2B84 RIGHT/LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
+ ⮊ ⮈ U+2B8A, U+2B88 RIGHT/LEFTWARDS BLACK CIRCLED WHITE ARROW
+ ⮕ ⬅ U+2B95, U+2B05 RIGHT/LEFTWARDS BLACK ARROW
+ ⮚ ⮘ U+2B9A, U+2B98 THREE-D TOP-LIGHTED RIGHT/LEFTWARDS EQUILATERAL
+ ARROWHEAD
+ ⮞ ⮜ U+2B9E, U+2B9C BLACK RIGHT/LEFTWARDS EQUILATERAL ARROWHEAD
+ ⮡ ⮠ U+2BA1, U+2BA0 DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP
+ RIGHT/LEFTWARDS
+ ⮣ ⮢ U+2BA3, U+2BA2 UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP
+ RIGHT/LEFTWARDS
+ ⮩ ⮨ U+2BA9, U+2BA8 BLACK CURVED DOWNWARDS AND RIGHT/LEFTWARDS ARROW
+ ⮫ ⮪ U+2BAB, U+2BAA BLACK CURVED UPWARDS AND RIGHT/LEFTWARDS ARROW
+ ⮱ ⮰ U+2BB1, U+2BB0 RIBBON ARROW DOWN RIGHT/LEFT
+ ⮳ ⮲ U+2BB3, U+2BB2 RIBBON ARROW UP RIGHT/LEFT
+ ⯮ ⯬ U+2BEE, U+2BEC RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE
+ ARROWHEADS
+ ⸂ ⸃ U+2E02, U+2E03 LEFT/RIGHT SUBSTITUTION BRACKET
+ ⸃ ⸂ U+2E03, U+2E02 RIGHT/LEFT SUBSTITUTION BRACKET
+ ⸄ ⸅ U+2E04, U+2E05 LEFT/RIGHT DOTTED SUBSTITUTION BRACKET
+ ⸅ ⸄ U+2E05, U+2E04 RIGHT/LEFT DOTTED SUBSTITUTION BRACKET
+ ⸉ ⸊ U+2E09, U+2E0A LEFT/RIGHT TRANSPOSITION BRACKET
+ ⸊ ⸉ U+2E0A, U+2E09 RIGHT/LEFT TRANSPOSITION BRACKET
+ ⸌ ⸍ U+2E0C, U+2E0D LEFT/RIGHT RAISED OMISSION BRACKET
+ ⸍ ⸌ U+2E0D, U+2E0C RIGHT/LEFT RAISED OMISSION BRACKET
+ ⸑ ⸐ U+2E11, U+2E10 REVERSED FORKED PARAGRAPHOS, FORKED PARAGRAPHOS
+ ⸜ ⸝ U+2E1C, U+2E1D LEFT/RIGHT LOW PARAPHRASE BRACKET
+ ⸝ ⸜ U+2E1D, U+2E1C RIGHT/LEFT LOW PARAPHRASE BRACKET
+ ⸠ ⸡ U+2E20, U+2E21 LEFT/RIGHT VERTICAL BAR WITH QUILL
+ ⸡ ⸠ U+2E21, U+2E20 RIGHT/LEFT VERTICAL BAR WITH QUILL
+ ⸢ ⸣ U+2E22, U+2E23 TOP LEFT/RIGHT HALF BRACKET
+ ⸤ ⸥ U+2E24, U+2E25 BOTTOM LEFT/RIGHT HALF BRACKET
+ ⸦ ⸧ U+2E26, U+2E27 LEFT/RIGHT SIDEWAYS U BRACKET
+ ⸨ ⸩ U+2E28, U+2E29 LEFT/RIGHT DOUBLE PARENTHESIS
+ ⸶ ⸷ U+2E36, U+2E37 DAGGER WITH LEFT/RIGHT GUARD
+ ⹂ „ U+2E42, U+201E DOUBLE LOW-REVERSED-9 QUOTATION MARK, DOUBLE
+ LOW-9 QUOTATION MARK
+ ⹕ ⹖ U+2E55, U+2E56 LEFT/RIGHT SQUARE BRACKET WITH STROKE
+ ⹗ ⹘ U+2E57, U+2E58 LEFT/RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+ ⹙ ⹚ U+2E59, U+2E5A TOP HALF LEFT/RIGHT PARENTHESIS
+ ⹛ ⹜ U+2E5B, U+2E5C BOTTOM HALF LEFT/RIGHT PARENTHESIS
+ 〈 〉 U+3008, U+3009 LEFT/RIGHT ANGLE BRACKET
+ 《 》 U+300A, U+300B LEFT/RIGHT DOUBLE ANGLE BRACKET
+ 「 」 U+300C, U+300D LEFT/RIGHT CORNER BRACKET
+ 『 』 U+300E, U+300F LEFT/RIGHT WHITE CORNER BRACKET
+ 【 】 U+3010, U+3011 LEFT/RIGHT BLACK LENTICULAR BRACKET
+ 〔 〕 U+3014, U+3015 LEFT/RIGHT TORTOISE SHELL BRACKET
+ 〖 〗 U+3016, U+3017 LEFT/RIGHT WHITE LENTICULAR BRACKET
+ 〘 〙 U+3018, U+3019 LEFT/RIGHT WHITE TORTOISE SHELL BRACKET
+ 〚 〛 U+301A, U+301B LEFT/RIGHT WHITE SQUARE BRACKET
+ 〝 〞 U+301D, U+301E REVERSED DOUBLE PRIME QUOTATION MARK, DOUBLE
+ PRIME QUOTATION MARK
+ ꧁ ꧂ U+A9C1, U+A9C2 JAVANESE LEFT/RIGHT RERENGGAN
+ ﴾ ﴿ U+FD3E, U+FD3F ORNATE LEFT/RIGHT PARENTHESIS
+ ﹙ ﹚ U+FE59, U+FE5A SMALL LEFT/RIGHT PARENTHESIS
+ ﹛ ﹜ U+FE5B, U+FE5C SMALL LEFT/RIGHT CURLY BRACKET
+ ﹝ ﹞ U+FE5D, U+FE5E SMALL LEFT/RIGHT TORTOISE SHELL BRACKET
+ ﹤ ﹥ U+FE64, U+FE65 SMALL LESS-THAN/GREATER-THAN SIGN
+ ( ) U+FF08, U+FF09 FULLWIDTH LEFT/RIGHT PARENTHESIS
+ < > U+FF1C, U+FF1E FULLWIDTH LESS-THAN/GREATER-THAN SIGN
+ [ ] U+FF3B, U+FF3D FULLWIDTH LEFT/RIGHT SQUARE BRACKET
+ { } U+FF5B, U+FF5D FULLWIDTH LEFT/RIGHT CURLY BRACKET
+ ⦅ ⦆ U+FF5F, U+FF60 FULLWIDTH LEFT/RIGHT WHITE PARENTHESIS
+ 「 」 U+FF62, U+FF63 HALFWIDTH LEFT/RIGHT CORNER BRACKET
+ → ← U+FFEB, U+FFE9 HALFWIDTH RIGHT/LEFTWARDS ARROW
+ 𝄃 𝄂 U+1D103, U+1D102 MUSICAL SYMBOL REVERSE FINAL BARLINE, MUSICAL
+ SYMBOL FINAL BARLINE
+ 𝄆 𝄇 U+1D106, U+1D107 MUSICAL SYMBOL LEFT/RIGHT REPEAT SIGN
+ 👉 👈 U+1F449, U+1F448 WHITE RIGHT/LEFT POINTING BACKHAND INDEX
+ 🔈 🕨 U+1F508, U+1F568 SPEAKER, RIGHT SPEAKER
+ 🔉 🕩 U+1F509, U+1F569 SPEAKER WITH ONE SOUND WAVE, RIGHT SPEAKER WITH
+ ONE SOUND WAVE
+ 🔊 🕪 U+1F50A, U+1F56A SPEAKER WITH THREE SOUND WAVES, RIGHT SPEAKER
+ WITH THREE SOUND WAVES
+ 🕻 🕽 U+1F57B, U+1F57D LEFT/RIGHT HAND TELEPHONE RECEIVER
+ 🖙 🖘 U+1F599, U+1F598 SIDEWAYS WHITE RIGHT/LEFT POINTING INDEX
+ 🖛 🖚 U+1F59B, U+1F59A SIDEWAYS BLACK RIGHT/LEFT POINTING INDEX
+ 🖝 🖜 U+1F59D, U+1F59C BLACK RIGHT/LEFT POINTING BACKHAND INDEX
+ 🗦 🗧 U+1F5E6, U+1F5E7 THREE RAYS LEFT/RIGHT
+ 🠂 🠀 U+1F802, U+1F800 RIGHT/LEFTWARDS ARROW WITH SMALL TRIANGLE
+ ARROWHEAD
+ 🠆 🠄 U+1F806, U+1F804 RIGHT/LEFTWARDS ARROW WITH MEDIUM TRIANGLE
+ ARROWHEAD
+ 🠊 🠈 U+1F80A, U+1F808 RIGHT/LEFTWARDS ARROW WITH LARGE TRIANGLE
+ ARROWHEAD
+ 🠒 🠐 U+1F812, U+1F810 RIGHT/LEFTWARDS ARROW WITH SMALL EQUILATERAL
+ ARROWHEAD
+ 🠖 🠔 U+1F816, U+1F814 RIGHT/LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
+ 🠚 🠘 U+1F81A, U+1F818 HEAVY RIGHT/LEFTWARDS ARROW WITH EQUILATERAL
+ ARROWHEAD
+ 🠞 🠜 U+1F81E, U+1F81C HEAVY RIGHT/LEFTWARDS ARROW WITH LARGE
+ EQUILATERAL ARROWHEAD
+ 🠢 🠠 U+1F822, U+1F820 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
+ NARROW SHAFT
+ 🠦 🠤 U+1F826, U+1F824 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
+ MEDIUM SHAFT
+ 🠪 🠨 U+1F82A, U+1F828 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD
+ SHAFT
+ 🠮 🠬 U+1F82E, U+1F82C RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH
+ HEAVY SHAFT
+ 🠲 🠰 U+1F832, U+1F830 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY
+ HEAVY SHAFT
+ 🠶 🠴 U+1F836, U+1F834 RIGHT/LEFTWARDS FINGER-POST ARROW
+ 🠺 🠸 U+1F83A, U+1F838 RIGHT/LEFTWARDS SQUARED ARROW
+ 🠾 🠼 U+1F83E, U+1F83C RIGHT/LEFTWARDS COMPRESSED ARROW
+ 🡂 🡀 U+1F842, U+1F840 RIGHT/LEFTWARDS HEAVY COMPRESSED ARROW
+ 🡆 🡄 U+1F846, U+1F844 RIGHT/LEFTWARDS HEAVY ARROW
+ 🡒 🡐 U+1F852, U+1F850 RIGHT/LEFTWARDS SANS-SERIF ARROW
+ 🡢 🡠 U+1F862, U+1F860 WIDE-HEADED RIGHT/LEFTWARDS LIGHT BARB ARROW
+ 🡪 🡨 U+1F86A, U+1F868 WIDE-HEADED RIGHT/LEFTWARDS BARB ARROW
+ 🡲 🡰 U+1F872, U+1F870 WIDE-HEADED RIGHT/LEFTWARDS MEDIUM BARB ARROW
+ 🡺 🡸 U+1F87A, U+1F878 WIDE-HEADED RIGHT/LEFTWARDS HEAVY BARB ARROW
+ 🢂 🢀 U+1F882, U+1F880 WIDE-HEADED RIGHT/LEFTWARDS VERY HEAVY BARB
+ ARROW
+ 🢒 🢐 U+1F892, U+1F890 RIGHT/LEFTWARDS TRIANGLE ARROWHEAD
+ 🢖 🢔 U+1F896, U+1F894 RIGHT/LEFTWARDS WHITE ARROW WITHIN TRIANGLE
+ ARROWHEAD
+ 🢚 🢘 U+1F89A, U+1F898 RIGHT/LEFTWARDS ARROW WITH NOTCHED TAIL
+ 🢡 🢠 U+1F8A1, U+1F8A0 RIGHTWARDS BOTTOM SHADED WHITE ARROW,
+ LEFTWARDS BOTTOM-SHADED WHITE ARROW
+ 🢣 🢢 U+1F8A3, U+1F8A2 RIGHT/LEFTWARDS TOP SHADED WHITE ARROW
+ 🢥 🢦 U+1F8A5, U+1F8A6 RIGHT/LEFTWARDS RIGHT-SHADED WHITE ARROW
+ 🢧 🢤 U+1F8A7, U+1F8A4 RIGHT/LEFTWARDS LEFT-SHADED WHITE ARROW
+ 🢩 🢨 U+1F8A9, U+1F8A8 RIGHT/LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW
+ 🢫 🢪 U+1F8AB, U+1F8AA RIGHT/LEFTWARDS FRONT-TILTED SHADOWED WHITE
+ ARROW
+
+=head2 The 'module_true' feature
+
+This feature removes the need to return a true value at the end of a module
+loaded with C<require> or C<use>. Any errors during compilation will cause
+failures, but reaching the end of the module when this feature is in effect
+will prevent C<perl> from throwing an exception that the module "did not return
+a true value".
+
+=head2 The 'class' feature
+
+B<WARNING>: This feature is still experimental and the implementation may
+change or be removed in future versions of Perl. For this reason, Perl will
+warn when you use the feature, unless you have explicitly disabled the warning:
+
+ no warnings "experimental::class";
+
+This feature enables the C<class> block syntax and other associated keywords
+which implement the "new" object system, previously codenamed "Corinna".
+
=head1 FEATURE BUNDLES
It's possible to load multiple features together, using
@@ -501,6 +963,14 @@ The following feature bundles are available:
postderef_qq say state switch unicode_eval
unicode_strings
+ :5.36 bareword_filehandles bitwise current_sub
+ evalbytes fc isa postderef_qq say signatures
+ state unicode_eval unicode_strings
+
+ :5.38 bitwise current_sub evalbytes fc isa
+ module_true postderef_qq say signatures
+ state unicode_eval unicode_strings
+
The C<:default> bundle represents the feature set that is enabled before
any C<use feature> or C<no feature> declaration.
@@ -530,12 +1000,12 @@ main compilation unit (that is, the one-liner that follows C<-E>).
By explicitly requiring a minimum Perl version number for your program, with
the C<use VERSION> construct. That is,
- use v5.10.0;
+ use v5.36.0;
will do an implicit
no feature ':all';
- use feature ':5.10';
+ use feature ':5.36';
and so on. Note how the trailing sub-version
is automatically stripped from the
@@ -543,7 +1013,7 @@ version.
But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
- use 5.010;
+ use 5.036;
with the same effect.
@@ -555,6 +1025,76 @@ also does the equivalent of C<use strict>; see L<perlfunc/use> for details.
=back
+=head1 CHECKING FEATURES
+
+C<feature> provides some simple APIs to check which features are enabled.
+
+These functions cannot be imported and must be called by their fully
+qualified names. If you don't otherwise need to set a feature you will
+need to ensure C<feature> is loaded with:
+
+ use feature ();
+
+=over
+
+=item feature_enabled($feature)
+
+=item feature_enabled($feature, $depth)
+
+ package MyStandardEnforcer;
+ use feature ();
+ use Carp "croak";
+ sub import {
+ croak "disable indirect!" if feature::feature_enabled("indirect");
+ }
+
+Test whether a named feature is enabled at a given level in the call
+stack, returning a true value if it is. C<$depth> defaults to 1,
+which checks the scope that called the scope calling
+feature::feature_enabled().
+
+croaks for an unknown feature name.
+
+=item features_enabled()
+
+=item features_enabled($depth)
+
+ package ReportEnabledFeatures;
+ use feature "say";
+ sub import {
+ say STDERR join " ", feature::features_enabled();
+ }
+
+Returns a list of the features enabled at a given level in the call
+stack. C<$depth> defaults to 1, which checks the scope that called
+the scope calling feature::features_enabled().
+
+=item feature_bundle()
+
+=item feature_bundle($depth)
+
+Returns the feature bundle, if any, selected at a given level in the
+call stack. C<$depth> defaults to 1, which checks the scope that called
+the scope calling feature::feature_bundle().
+
+Returns an undefined value if no feature bundle is selected in the
+scope.
+
+The bundle name returned will be for the earliest bundle matching the
+selected bundle, so:
+
+ use feature ();
+ use v5.12;
+ BEGIN { print feature::feature_bundle(0); }
+
+will print C<5.11>.
+
+This returns internal state, at this point C<use v5.12;> sets the
+feature bundle, but C< use feature ":5.12"; > does not set the feature
+bundle. This may change in a future release of perl.
+
+=back
+
=cut
sub import {
@@ -644,6 +1184,67 @@ sub croak {
Carp::croak(@_);
}
+sub features_enabled {
+ my ($depth) = @_;
+
+ $depth //= 1;
+ my @frame = caller($depth+1)
+ or return;
+ my ($hints, $hinthash) = @frame[8, 10];
+
+ my $bundle_number = $hints & $hint_mask;
+ if ($bundle_number != $hint_mask) {
+ return $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}->@*;
+ }
+ else {
+ my @features;
+ for my $feature (sort keys %feature) {
+ if ($hinthash->{$feature{$feature}}) {
+ push @features, $feature;
+ }
+ }
+ return @features;
+ }
+}
+
+sub feature_enabled {
+ my ($feature, $depth) = @_;
+
+ $depth //= 1;
+ my @frame = caller($depth+1)
+ or return;
+ my ($hints, $hinthash) = @frame[8, 10];
+
+ my $hint_feature = $feature{$feature}
+ or croak "Unknown feature $feature";
+ my $bundle_number = $hints & $hint_mask;
+ if ($bundle_number != $hint_mask) {
+ my $bundle = $hint_bundles[$bundle_number >> $hint_shift];
+ for my $bundle_feature ($feature_bundle{$bundle}->@*) {
+ return 1 if $bundle_feature eq $feature;
+ }
+ return 0;
+ }
+ else {
+ return $hinthash->{$hint_feature} // 0;
+ }
+}
+
+sub feature_bundle {
+ my $depth = shift;
+
+ $depth //= 1;
+ my @frame = caller($depth+1)
+ or return;
+ my $bundle_number = $frame[8] & $hint_mask;
+ if ($bundle_number != $hint_mask) {
+ return $hint_bundles[$bundle_number >> $hint_shift];
+ }
+ else {
+ return undef;
+ }
+}
+
1;
-# ex: set ro:
+# ex: set ro ft=perl: