1215 lines
52 KiB
Perl
1215 lines
52 KiB
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.72';
|
|||
|
|
|
|||
|
|
our %feature = (
|
|||
|
|
fc => 'feature_fc',
|
|||
|
|
isa => 'feature_isa',
|
|||
|
|
say => 'feature_say',
|
|||
|
|
try => 'feature_try',
|
|||
|
|
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__',
|
|||
|
|
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 = (
|
|||
|
|
"5.10" => [qw(bareword_filehandles indirect multidimensional say state switch)],
|
|||
|
|
"5.11" => [qw(bareword_filehandles indirect multidimensional say state switch unicode_strings)],
|
|||
|
|
"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)],
|
|||
|
|
"5.35" => [qw(bareword_filehandles bitwise current_sub evalbytes fc isa postderef_qq say signatures state unicode_eval unicode_strings)],
|
|||
|
|
"all" => [qw(bareword_filehandles bitwise current_sub declared_refs defer evalbytes extra_paired_delimiters fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)],
|
|||
|
|
"default" => [qw(bareword_filehandles indirect multidimensional)],
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$feature_bundle{"5.12"} = $feature_bundle{"5.11"};
|
|||
|
|
$feature_bundle{"5.13"} = $feature_bundle{"5.11"};
|
|||
|
|
$feature_bundle{"5.14"} = $feature_bundle{"5.11"};
|
|||
|
|
$feature_bundle{"5.16"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.17"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.18"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.19"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.20"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.21"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.22"} = $feature_bundle{"5.15"};
|
|||
|
|
$feature_bundle{"5.24"} = $feature_bundle{"5.23"};
|
|||
|
|
$feature_bundle{"5.25"} = $feature_bundle{"5.23"};
|
|||
|
|
$feature_bundle{"5.26"} = $feature_bundle{"5.23"};
|
|||
|
|
$feature_bundle{"5.28"} = $feature_bundle{"5.27"};
|
|||
|
|
$feature_bundle{"5.29"} = $feature_bundle{"5.27"};
|
|||
|
|
$feature_bundle{"5.30"} = $feature_bundle{"5.27"};
|
|||
|
|
$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.9.5"} = $feature_bundle{"5.10"};
|
|||
|
|
my %noops = (
|
|||
|
|
postderef => 1,
|
|||
|
|
lexical_subs => 1,
|
|||
|
|
);
|
|||
|
|
my %removed = (
|
|||
|
|
array_base => 1,
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
our $hint_shift = 26;
|
|||
|
|
our $hint_mask = 0x3c000000;
|
|||
|
|
our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 5.35 );
|
|||
|
|
|
|||
|
|
# This gets set (for now) in $^H as well as in %^H,
|
|||
|
|
# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
|
|||
|
|
# See HINT_UNI_8_BIT in perl.h.
|
|||
|
|
our $hint_uni8bit = 0x00000800;
|
|||
|
|
|
|||
|
|
# TODO:
|
|||
|
|
# - think about versioned features (use feature switch => 2)
|
|||
|
|
|
|||
|
|
=encoding utf8
|
|||
|
|
|
|||
|
|
=head1 NAME
|
|||
|
|
|
|||
|
|
feature - Perl pragma to enable new features
|
|||
|
|
|
|||
|
|
=head1 SYNOPSIS
|
|||
|
|
|
|||
|
|
use feature qw(fc say);
|
|||
|
|
|
|||
|
|
# Without the "use feature" above, this code would not be able to find
|
|||
|
|
# the built-ins "say" or "fc":
|
|||
|
|
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';
|
|||
|
|
|
|||
|
|
|
|||
|
|
# implicitly loads :5.10 feature bundle
|
|||
|
|
use v5.10;
|
|||
|
|
|
|||
|
|
=head1 DESCRIPTION
|
|||
|
|
|
|||
|
|
It is usually impossible to add new syntax to Perl without breaking
|
|||
|
|
some existing programs. This pragma provides a way to minimize that
|
|||
|
|
risk. New syntactic constructs, or new semantic meanings to older
|
|||
|
|
constructs, can be enabled by C<use feature 'foo'>, and will be parsed
|
|||
|
|
only when the appropriate feature pragma is in scope. (Nevertheless, the
|
|||
|
|
C<CORE::> prefix provides access to all Perl keywords, regardless of this
|
|||
|
|
pragma.)
|
|||
|
|
|
|||
|
|
=head2 Lexical effect
|
|||
|
|
|
|||
|
|
Like other pragmas (C<use strict>, for example), features have a lexical
|
|||
|
|
effect. C<use feature qw(foo)> will only make the feature "foo" available
|
|||
|
|
from that point to the end of the enclosing block.
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
use feature 'say';
|
|||
|
|
say "say is available here";
|
|||
|
|
}
|
|||
|
|
print "But not here.\n";
|
|||
|
|
|
|||
|
|
=head2 C<no feature>
|
|||
|
|
|
|||
|
|
Features can also be turned off by using C<no feature "foo">. This too
|
|||
|
|
has lexical effect.
|
|||
|
|
|
|||
|
|
use feature 'say';
|
|||
|
|
say "say is available here";
|
|||
|
|
{
|
|||
|
|
no feature 'say';
|
|||
|
|
print "But not here.\n";
|
|||
|
|
}
|
|||
|
|
say "Yet it is here.";
|
|||
|
|
|
|||
|
|
C<no feature> with no features specified will reset to the default group. To
|
|||
|
|
disable I<all> features (an unusual request!) use C<no feature ':all'>.
|
|||
|
|
|
|||
|
|
=head1 AVAILABLE FEATURES
|
|||
|
|
|
|||
|
|
=head2 The 'say' feature
|
|||
|
|
|
|||
|
|
C<use feature 'say'> tells the compiler to enable the Raku-inspired
|
|||
|
|
C<say> function.
|
|||
|
|
|
|||
|
|
See L<perlfunc/say> for details.
|
|||
|
|
|
|||
|
|
This feature is available starting with Perl 5.10.
|
|||
|
|
|
|||
|
|
=head2 The 'state' feature
|
|||
|
|
|
|||
|
|
C<use feature 'state'> tells the compiler to enable C<state>
|
|||
|
|
variables.
|
|||
|
|
|
|||
|
|
See L<perlsub/"Persistent Private Variables"> for details.
|
|||
|
|
|
|||
|
|
This feature is available starting with Perl 5.10.
|
|||
|
|
|
|||
|
|
=head2 The 'switch' 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::smartmatch";
|
|||
|
|
|
|||
|
|
C<use feature 'switch'> tells the compiler to enable the Raku
|
|||
|
|
given/when construct.
|
|||
|
|
|
|||
|
|
See L<perlsyn/"Switch Statements"> for details.
|
|||
|
|
|
|||
|
|
This feature is available starting with Perl 5.10.
|
|||
|
|
|
|||
|
|
=head2 The 'unicode_strings' feature
|
|||
|
|
|
|||
|
|
C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
|
|||
|
|
in all string operations executed within its scope (unless they are also
|
|||
|
|
within the scope of either C<use locale> or C<use bytes>). The same applies
|
|||
|
|
to all regular expressions compiled within the scope, even if executed outside
|
|||
|
|
it. It does not change the internal representation of strings, but only how
|
|||
|
|
they are interpreted.
|
|||
|
|
|
|||
|
|
C<no feature 'unicode_strings'> tells the compiler to use the traditional
|
|||
|
|
Perl rules wherein the native character set rules is used unless it is
|
|||
|
|
clear to Perl that Unicode is desired. This can lead to some surprises
|
|||
|
|
when the behavior suddenly changes. (See
|
|||
|
|
L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
|
|||
|
|
potentially using Unicode in your program, the
|
|||
|
|
C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
|
|||
|
|
|
|||
|
|
This feature is available starting with Perl 5.12; was almost fully
|
|||
|
|
implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>;
|
|||
|
|
was extended further in Perl 5.26 to cover L<the range
|
|||
|
|
operator|perlop/Range Operators>; and was extended again in Perl 5.28 to
|
|||
|
|
cover L<special-cased whitespace splitting|perlfunc/split>.
|
|||
|
|
|
|||
|
|
=head2 The 'unicode_eval' and 'evalbytes' features
|
|||
|
|
|
|||
|
|
Together, these two features are intended to replace the legacy string
|
|||
|
|
C<eval> function, which behaves problematically in some instances. They are
|
|||
|
|
available starting with Perl 5.16, and are enabled by default by a
|
|||
|
|
S<C<use 5.16>> or higher declaration.
|
|||
|
|
|
|||
|
|
C<unicode_eval> changes the behavior of plain string C<eval> to work more
|
|||
|
|
consistently, especially in the Unicode world. Certain (mis)behaviors
|
|||
|
|
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 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>.
|
|||
|
|
|
|||
|
|
=head2 The 'current_sub' feature
|
|||
|
|
|
|||
|
|
This provides the C<__SUB__> token that returns a reference to the current
|
|||
|
|
subroutine or C<undef> outside of a subroutine.
|
|||
|
|
|
|||
|
|
This feature is available starting with Perl 5.16.
|
|||
|
|
|
|||
|
|
=head2 The 'array_base' feature
|
|||
|
|
|
|||
|
|
This feature supported the legacy C<$[> variable. See L<perlvar/$[>.
|
|||
|
|
It was on by default but disabled under C<use v5.16> (see
|
|||
|
|
L</IMPLICIT LOADING>, below) and unavailable since perl 5.30.
|
|||
|
|
|
|||
|
|
This feature is available under this name starting with Perl 5.16. In
|
|||
|
|
previous versions, it was simply on all the time, and this pragma knew
|
|||
|
|
nothing about it.
|
|||
|
|
|
|||
|
|
=head2 The 'fc' feature
|
|||
|
|
|
|||
|
|
C<use feature 'fc'> tells the compiler to enable the C<fc> function,
|
|||
|
|
which implements Unicode casefolding.
|
|||
|
|
|
|||
|
|
See L<perlfunc/fc> for details.
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.16 onwards.
|
|||
|
|
|
|||
|
|
=head2 The 'lexical_subs' feature
|
|||
|
|
|
|||
|
|
In Perl versions prior to 5.26, this feature enabled
|
|||
|
|
declaration of subroutines via C<my sub foo>, C<state sub foo>
|
|||
|
|
and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.18 onwards. From Perl 5.18 to 5.24,
|
|||
|
|
it was classed as experimental, and Perl emitted a warning for its
|
|||
|
|
usage, except when explicitly disabled:
|
|||
|
|
|
|||
|
|
no warnings "experimental::lexical_subs";
|
|||
|
|
|
|||
|
|
As of Perl 5.26, use of this feature no longer triggers a warning, though
|
|||
|
|
the C<experimental::lexical_subs> warning category still exists (for
|
|||
|
|
compatibility with code that disables it). In addition, this syntax is
|
|||
|
|
not only no longer experimental, but it is enabled for all Perl code,
|
|||
|
|
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:
|
|||
|
|
|
|||
|
|
my $s = "[@{ $h->{a} }]";
|
|||
|
|
my $s = "[$h->{a}->@*]";
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it
|
|||
|
|
was classed as experimental, and Perl emitted a warning for its
|
|||
|
|
usage, except when explicitly disabled:
|
|||
|
|
|
|||
|
|
no warnings "experimental::postderef";
|
|||
|
|
|
|||
|
|
As of Perl 5.24, use of this feature no longer triggers a warning, though
|
|||
|
|
the C<experimental::postderef> warning category still exists (for
|
|||
|
|
compatibility with code that disables it).
|
|||
|
|
|
|||
|
|
The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable
|
|||
|
|
postfix dereference syntax outside double-quotish interpolations. In those
|
|||
|
|
versions, using it triggered the C<experimental::postderef> warning in the
|
|||
|
|
same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is
|
|||
|
|
not only no longer experimental, but it is enabled for all Perl code,
|
|||
|
|
regardless of what feature declarations are in scope.
|
|||
|
|
|
|||
|
|
=head2 The 'signatures' feature
|
|||
|
|
|
|||
|
|
This enables syntax for declaring subroutine arguments as lexical variables.
|
|||
|
|
For example, for this subroutine:
|
|||
|
|
|
|||
|
|
sub foo ($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. 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
|
|||
|
|
|
|||
|
|
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::refaliasing";
|
|||
|
|
|
|||
|
|
This enables aliasing via assignment to references:
|
|||
|
|
|
|||
|
|
\$a = \$b; # $a and $b now point to the same scalar
|
|||
|
|
\@a = \@b; # to the same array
|
|||
|
|
\%a = \%b;
|
|||
|
|
\&a = \&b;
|
|||
|
|
foreach \%hash (@array_of_hash_refs) {
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
See L<perlref/Assigning to References> for details.
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.22 onwards.
|
|||
|
|
|
|||
|
|
=head2 The 'bitwise' feature
|
|||
|
|
|
|||
|
|
This makes the four standard bitwise operators (C<& | ^ ~>) treat their
|
|||
|
|
operands consistently as numbers, and introduces four new dotted operators
|
|||
|
|
(C<&. |. ^. ~.>) that treat their operands consistently as strings. The
|
|||
|
|
same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
|
|||
|
|
|
|||
|
|
See L<perlop/Bitwise String Operators> for details.
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.22 onwards. Starting in Perl 5.28,
|
|||
|
|
C<use v5.28> will enable the feature. Before 5.28, it was still
|
|||
|
|
experimental and would emit a warning in the "experimental::bitwise"
|
|||
|
|
category.
|
|||
|
|
|
|||
|
|
=head2 The 'declared_refs' 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::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
|
|||
|
|
conjunction with the "refaliasing" feature. See L<perlref/Declaring a
|
|||
|
|
Reference to a Variable> for examples.
|
|||
|
|
|
|||
|
|
This feature is available from Perl 5.26 onwards.
|
|||
|
|
|
|||
|
|
=head2 The 'isa' feature
|
|||
|
|
|
|||
|
|
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. 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
|
|||
|
|
|
|||
|
|
This feature allows the use of L<indirect object
|
|||
|
|
syntax|perlobj/Indirect Object Syntax> for method calls, e.g. C<new
|
|||
|
|
Foo 1, 2;>. It is enabled by default, but can be turned off to
|
|||
|
|
disallow indirect object syntax.
|
|||
|
|
|
|||
|
|
This feature is available under this name from Perl 5.32 onwards. In
|
|||
|
|
previous versions, it was simply on all the time. To disallow (or
|
|||
|
|
warn on) indirect object syntax on older Perls, see the L<indirect>
|
|||
|
|
CPAN module.
|
|||
|
|
|
|||
|
|
=head2 The 'multidimensional' feature
|
|||
|
|
|
|||
|
|
This feature enables multidimensional array emulation, a perl 4 (or
|
|||
|
|
earlier) feature that was used to emulate multidimensional arrays with
|
|||
|
|
hashes. This works by converting code like C<< $foo{$x, $y} >> into
|
|||
|
|
C<< $foo{join($;, $x, $y)} >>. It is enabled by default, but can be
|
|||
|
|
turned off to disable multidimensional array emulation.
|
|||
|
|
|
|||
|
|
When this feature is disabled the syntax that is normally replaced
|
|||
|
|
will report a compilation error.
|
|||
|
|
|
|||
|
|
This feature is available under this name from Perl 5.34 onwards. In
|
|||
|
|
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.
|
|||
|
|
|
|||
|
|
This feature enables bareword filehandles for builtin functions
|
|||
|
|
operations, a generally discouraged practice. It is enabled by
|
|||
|
|
default, but can be turned off to disable bareword filehandles, except
|
|||
|
|
for the exceptions listed below.
|
|||
|
|
|
|||
|
|
The perl built-in filehandles C<STDIN>, C<STDOUT>, C<STDERR>, C<DATA>,
|
|||
|
|
C<ARGV>, C<ARGVOUT> and the special C<_> are always enabled.
|
|||
|
|
|
|||
|
|
This feature is enabled under this name from Perl 5.34 onwards. In
|
|||
|
|
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.
|
|||
|
|
|
|||
|
|
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::try";
|
|||
|
|
|
|||
|
|
This feature enables the C<try> and C<catch> syntax, which allows exception
|
|||
|
|
handling, where exceptions thrown from the body of the block introduced with
|
|||
|
|
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>>>.
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
=head1 FEATURE BUNDLES
|
|||
|
|
|
|||
|
|
It's possible to load multiple features together, using
|
|||
|
|
a I<feature bundle>. The name of a feature bundle is prefixed with
|
|||
|
|
a colon, to distinguish it from an actual feature.
|
|||
|
|
|
|||
|
|
use feature ":5.10";
|
|||
|
|
|
|||
|
|
The following feature bundles are available:
|
|||
|
|
|
|||
|
|
bundle features included
|
|||
|
|
--------- -----------------
|
|||
|
|
:default indirect multidimensional
|
|||
|
|
bareword_filehandles
|
|||
|
|
|
|||
|
|
:5.10 bareword_filehandles indirect
|
|||
|
|
multidimensional say state switch
|
|||
|
|
|
|||
|
|
:5.12 bareword_filehandles indirect
|
|||
|
|
multidimensional say state switch
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.14 bareword_filehandles indirect
|
|||
|
|
multidimensional say state switch
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.16 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional say state
|
|||
|
|
switch unicode_eval unicode_strings
|
|||
|
|
|
|||
|
|
:5.18 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional say state
|
|||
|
|
switch unicode_eval unicode_strings
|
|||
|
|
|
|||
|
|
:5.20 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional say state
|
|||
|
|
switch unicode_eval unicode_strings
|
|||
|
|
|
|||
|
|
:5.22 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional say state
|
|||
|
|
switch unicode_eval unicode_strings
|
|||
|
|
|
|||
|
|
:5.24 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional postderef_qq
|
|||
|
|
say state switch unicode_eval
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.26 bareword_filehandles current_sub evalbytes
|
|||
|
|
fc indirect multidimensional postderef_qq
|
|||
|
|
say state switch unicode_eval
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.28 bareword_filehandles bitwise current_sub
|
|||
|
|
evalbytes fc indirect multidimensional
|
|||
|
|
postderef_qq say state switch unicode_eval
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.30 bareword_filehandles bitwise current_sub
|
|||
|
|
evalbytes fc indirect multidimensional
|
|||
|
|
postderef_qq say state switch unicode_eval
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.32 bareword_filehandles bitwise current_sub
|
|||
|
|
evalbytes fc indirect multidimensional
|
|||
|
|
postderef_qq say state switch unicode_eval
|
|||
|
|
unicode_strings
|
|||
|
|
|
|||
|
|
:5.34 bareword_filehandles bitwise current_sub
|
|||
|
|
evalbytes fc indirect multidimensional
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
The C<:default> bundle represents the feature set that is enabled before
|
|||
|
|
any C<use feature> or C<no feature> declaration.
|
|||
|
|
|
|||
|
|
Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
|
|||
|
|
no effect. Feature bundles are guaranteed to be the same for all sub-versions.
|
|||
|
|
|
|||
|
|
use feature ":5.14.0"; # same as ":5.14"
|
|||
|
|
use feature ":5.14.1"; # same as ":5.14"
|
|||
|
|
|
|||
|
|
=head1 IMPLICIT LOADING
|
|||
|
|
|
|||
|
|
Instead of loading feature bundles by name, it is easier to let Perl do
|
|||
|
|
implicit loading of a feature bundle for you.
|
|||
|
|
|
|||
|
|
There are two ways to load the C<feature> pragma implicitly:
|
|||
|
|
|
|||
|
|
=over 4
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
By using the C<-E> switch on the Perl command-line instead of C<-e>.
|
|||
|
|
That will enable the feature bundle for that version of Perl in the
|
|||
|
|
main compilation unit (that is, the one-liner that follows C<-E>).
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
By explicitly requiring a minimum Perl version number for your program, with
|
|||
|
|
the C<use VERSION> construct. That is,
|
|||
|
|
|
|||
|
|
use v5.10.0;
|
|||
|
|
|
|||
|
|
will do an implicit
|
|||
|
|
|
|||
|
|
no feature ':all';
|
|||
|
|
use feature ':5.10';
|
|||
|
|
|
|||
|
|
and so on. Note how the trailing sub-version
|
|||
|
|
is automatically stripped from the
|
|||
|
|
version.
|
|||
|
|
|
|||
|
|
But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
|
|||
|
|
|
|||
|
|
use 5.010;
|
|||
|
|
|
|||
|
|
with the same effect.
|
|||
|
|
|
|||
|
|
If the required version is older than Perl 5.10, the ":default" feature
|
|||
|
|
bundle is automatically loaded instead.
|
|||
|
|
|
|||
|
|
Unlike C<use feature ":5.12">, saying C<use v5.12> (or any higher version)
|
|||
|
|
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 {
|
|||
|
|
shift;
|
|||
|
|
|
|||
|
|
if (!@_) {
|
|||
|
|
croak("No features specified");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
__common(1, @_);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sub unimport {
|
|||
|
|
shift;
|
|||
|
|
|
|||
|
|
# A bare C<no feature> should reset to the default bundle
|
|||
|
|
if (!@_) {
|
|||
|
|
$^H &= ~($hint_uni8bit|$hint_mask);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
__common(0, @_);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
sub __common {
|
|||
|
|
my $import = shift;
|
|||
|
|
my $bundle_number = $^H & $hint_mask;
|
|||
|
|
my $features = $bundle_number != $hint_mask
|
|||
|
|
&& $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
|
|||
|
|
if ($features) {
|
|||
|
|
# Features are enabled implicitly via bundle hints.
|
|||
|
|
# Delete any keys that may be left over from last time.
|
|||
|
|
delete @^H{ values(%feature) };
|
|||
|
|
$^H |= $hint_mask;
|
|||
|
|
for (@$features) {
|
|||
|
|
$^H{$feature{$_}} = 1;
|
|||
|
|
$^H |= $hint_uni8bit if $_ eq 'unicode_strings';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
while (@_) {
|
|||
|
|
my $name = shift;
|
|||
|
|
if (substr($name, 0, 1) eq ":") {
|
|||
|
|
my $v = substr($name, 1);
|
|||
|
|
if (!exists $feature_bundle{$v}) {
|
|||
|
|
$v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
|
|||
|
|
if (!exists $feature_bundle{$v}) {
|
|||
|
|
unknown_feature_bundle(substr($name, 1));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
unshift @_, @{$feature_bundle{$v}};
|
|||
|
|
next;
|
|||
|
|
}
|
|||
|
|
if (!exists $feature{$name}) {
|
|||
|
|
if (exists $noops{$name}) {
|
|||
|
|
next;
|
|||
|
|
}
|
|||
|
|
if (!$import && exists $removed{$name}) {
|
|||
|
|
next;
|
|||
|
|
}
|
|||
|
|
unknown_feature($name);
|
|||
|
|
}
|
|||
|
|
if ($import) {
|
|||
|
|
$^H{$feature{$name}} = 1;
|
|||
|
|
$^H |= $hint_uni8bit if $name eq 'unicode_strings';
|
|||
|
|
} else {
|
|||
|
|
delete $^H{$feature{$name}};
|
|||
|
|
$^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sub unknown_feature {
|
|||
|
|
my $feature = shift;
|
|||
|
|
croak(sprintf('Feature "%s" is not supported by Perl %vd',
|
|||
|
|
$feature, $^V));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sub unknown_feature_bundle {
|
|||
|
|
my $feature = shift;
|
|||
|
|
croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
|
|||
|
|
$feature, $^V));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sub croak {
|
|||
|
|
require Carp;
|
|||
|
|
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:
|