# This script is normally invoked from regen.pl.
BEGIN {
- require './regen/regen_lib.pl';
push @INC, './lib';
+ require './regen/regen_lib.pl';
+ require './regen/HeaderParser.pm';
}
use strict;
# (feature name) => (internal name, used in %^H and macro names)
my %feature = (
- say => 'say',
- state => 'state',
- switch => 'switch',
- bitwise => 'bitwise',
- evalbytes => 'evalbytes',
- current_sub => '__SUB__',
- refaliasing => 'refaliasing',
- postderef_qq => 'postderef_qq',
- unicode_eval => 'unieval',
- declared_refs => 'myref',
- unicode_strings => 'unicode',
- fc => 'fc',
- signatures => 'signatures',
- isa => 'isa',
- indirect => 'indirect',
- multidimensional => 'multidimensional',
- bareword_filehandles => 'bareword_filehandles',
- try => 'try',
- defer => 'defer',
+ say => 'say',
+ state => 'state',
+ switch => 'switch',
+ bitwise => 'bitwise',
+ evalbytes => 'evalbytes',
+ current_sub => '__SUB__',
+ refaliasing => 'refaliasing',
+ postderef_qq => 'postderef_qq',
+ unicode_eval => 'unieval',
+ declared_refs => 'myref',
+ unicode_strings => 'unicode',
+ fc => 'fc',
+ signatures => 'signatures',
+ isa => 'isa',
+ indirect => 'indirect',
+ multidimensional => 'multidimensional',
+ bareword_filehandles => 'bareword_filehandles',
+ try => 'try',
+ defer => 'defer',
extra_paired_delimiters => 'more_delims',
+ module_true => 'module_true',
);
# NOTE: If a feature is ever enabled in a non-contiguous range of Perl
use constant V5_27 => sort ( +V5_23, qw{bitwise} );
use constant V5_35 => sort grep {; $_ ne 'switch'
- && $_ ne 'bareword_filehandles'
&& $_ ne 'indirect'
&& $_ ne 'multidimensional' } +V5_27, qw{isa signatures};
+use constant V5_37 => sort grep {; $_ ne 'bareword_filehandles' } +V5_35, qw{module_true};
+
+#
+# when updating features please also update the Pod entry for L</"FEATURES CHEAT SHEET">
+#
my %feature_bundle = (
all => [ sort keys %feature ],
default => [ qw{indirect multidimensional bareword_filehandles} ],
"5.33" => [ +V5_27 ],
# using 5.35 features bundle
"5.35" => [ +V5_35 ],
+ # using 5.37 features bundle
+ "5.37" => [ +V5_37 ],
);
my @noops = qw( postderef lexical_subs );
my $HintShift;
my $HintMask;
my $Uni8Bit;
+my $hp = HeaderParser->new()->read_file("perl.h");
-open "perl.h", "<", "perl.h" or die "$0 cannot open perl.h: $!";
-while (readline "perl.h") {
- next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
+foreach my $line_data (@{$hp->lines}) {
+ next unless $line_data->{type} eq "content"
+ and $line_data->{sub_type} eq "#define";
+ my $line = $line_data->{line};
+ next unless $line=~/^\s*#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
my $is_u8b = $1 =~ 8;
- /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
+ $line=~/(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$line\n ";
if ($is_u8b) {
$Uni8Bit = $1;
}
my $hex = $HintMask = $1;
my $bits = sprintf "%b", oct $1;
$bits =~ /^0*1+(0*)\z/
- or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
+ or die "Non-contiguous bits in $bits (binary for $hex):\n\n$line\n ";
$HintShift = length $1;
my $bits_needed =
length sprintf "%b", scalar keys %UniqueBundles;
$bits =~ /1{$bits_needed}/
or die "Not enough bits (need $bits_needed)"
- . " in $bits (binary for $hex):\n\n$_\n ";
+ . " in $bits (binary for $hex):\n\n$line\n ";
}
if ($Uni8Bit && $HintMask) { last }
}
die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
-close "perl.h";
-
my @HintedBundles =
('default', grep !/[^\d.]/, sort values %UniqueBundles);
print $h <<'EOH';
#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
-#define CURRENT_HINTS \
+/* this is preserved for testing and asserts */
+#define OLD_CURRENT_HINTS \
(PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
+/* this is the same thing, but simpler (no if) as PL_hints expands
+ to PL_compiling.cop_hints */
+#define CURRENT_HINTS \
+ PL_curcop->cop_hints
#define CURRENT_FEATURE_BUNDLE \
((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
__END__
package feature;
-
-our $VERSION = '1.71';
+our $VERSION = '1.79';
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
=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
=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}->@*]";
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.
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
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 behavior was always present in versions before Perl 5.34. In Perl 5.34,
-it was made controllable with the C<feature> pragma, but was on by default.
-It is not present in the C<:5.36> feature bundle, so C<use v5.36> disables
-this feature.
+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 '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>.
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+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+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+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+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+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+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".
=head1 FEATURE BUNDLES
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
But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
- use 5.010;
+ use 5.036;
with the same effect.