3 # Regenerate (overwriting only if changed):
8 # from information hardcoded into this script and from two #defines
11 # This script is normally invoked from regen.pl.
14 require './regen/regen_lib.pl';
20 ###########################################################################
23 # (feature name) => (internal name, used in %^H and macro names)
29 evalbytes => 'evalbytes',
30 current_sub => '__SUB__',
31 refaliasing => 'refaliasing',
32 postderef_qq => 'postderef_qq',
33 unicode_eval => 'unieval',
34 declared_refs => 'myref',
35 unicode_strings => 'unicode',
37 signatures => 'signatures',
40 # NOTE: If a feature is ever enabled in a non-contiguous range of Perl
41 # versions, any code below that uses %BundleRanges will have to
42 # be changed to account.
44 # 5.odd implies the next 5.even, but an explicit 5.even can override it.
45 my %feature_bundle = (
46 all => [ keys %feature ],
48 "5.9.5" => [qw(say state switch)],
49 "5.10" => [qw(say state switch)],
50 "5.11" => [qw(say state switch unicode_strings)],
51 "5.13" => [qw(say state switch unicode_strings)],
52 "5.15" => [qw(say state switch unicode_strings unicode_eval
53 evalbytes current_sub fc)],
54 "5.17" => [qw(say state switch unicode_strings unicode_eval
55 evalbytes current_sub fc)],
56 "5.19" => [qw(say state switch unicode_strings unicode_eval
57 evalbytes current_sub fc)],
58 "5.21" => [qw(say state switch unicode_strings unicode_eval
59 evalbytes current_sub fc)],
60 "5.23" => [qw(say state switch unicode_strings unicode_eval
61 evalbytes current_sub fc postderef_qq)],
62 "5.25" => [qw(say state switch unicode_strings unicode_eval
63 evalbytes current_sub fc postderef_qq)],
64 "5.27" => [qw(say state switch unicode_strings unicode_eval
65 evalbytes current_sub fc postderef_qq bitwise)],
66 "5.29" => [qw(say state switch unicode_strings unicode_eval
67 evalbytes current_sub fc postderef_qq bitwise)],
70 my @noops = qw( postderef lexical_subs );
71 my @removed = qw( array_base );
74 ###########################################################################
75 # More data generated from the above
77 for (keys %feature_bundle) {
78 next unless /^5\.(\d*[13579])\z/;
79 $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
82 my %UniqueBundles; # "say state switch" => 5.10
83 my %Aliases; # 5.12 => 5.11
84 for( sort keys %feature_bundle ) {
85 my $value = join(' ', sort @{$feature_bundle{$_}});
86 if (exists $UniqueBundles{$value}) {
87 $Aliases{$_} = $UniqueBundles{$value};
90 $UniqueBundles{$value} = $_;
94 my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
96 sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
99 next if $bund =~ /[^\d.]/ and $bund ne 'default';
100 for (@{$feature_bundle{$bund}}) {
101 if (@{$BundleRanges{$_} ||= []} == 2) {
102 $BundleRanges{$_}[1] = $bund
105 push @{$BundleRanges{$_}}, $bund;
114 open "perl.h", "<", "perl.h" or die "$0 cannot open perl.h: $!";
115 while (readline "perl.h") {
116 next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
117 my $is_u8b = $1 =~ 8;
118 /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
123 my $hex = $HintMask = $1;
124 my $bits = sprintf "%b", oct $1;
125 $bits =~ /^0*1+(0*)\z/
126 or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
127 $HintShift = length $1;
129 length sprintf "%b", scalar keys %UniqueBundles;
130 $bits =~ /1{$bits_needed}/
131 or die "Not enough bits (need $bits_needed)"
132 . " in $bits (binary for $hex):\n\n$_\n ";
134 if ($Uni8Bit && $HintMask) { last }
136 die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
137 die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
142 ('default', grep !/[^\d.]/, sort values %UniqueBundles);
145 ###########################################################################
146 # Open files to be generated
149 open_new($_, '>', { by => 'regen/feature.pl' });
150 } 'lib/feature.pm', 'feature.h';
153 ###########################################################################
154 # Generate lib/feature.pm
157 last if /^FEATURES$/ ;
164 if (!defined $long or length $long < length) {
171 print $pm "our %feature = (\n";
172 my $width = length longest keys %feature;
173 for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
174 print $pm " $_" . " "x($width-length)
175 . " => 'feature_$feature{$_}',\n";
179 print $pm "our %feature_bundle = (\n";
180 $width = length longest values %UniqueBundles;
181 for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
182 keys %UniqueBundles ) {
183 my $bund = $UniqueBundles{$_};
184 print $pm qq' "$bund"' . " "x($width-length $bund)
185 . qq' => [qw($_)],\n';
189 for (sort keys %Aliases) {
191 qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
194 print $pm "my \%noops = (\n";
195 print $pm " $_ => 1,\n", for @noops;
198 print $pm "my \%removed = (\n";
199 print $pm " $_ => 1,\n", for @removed;
204 our \$hint_shift = $HintShift;
205 our \$hint_mask = $HintMask;
206 our \@hint_bundles = qw( @HintedBundles );
208 # This gets set (for now) in \$^H as well as in %^H,
209 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
210 # See HINT_UNI_8_BIT in perl.h.
211 our \$hint_uni8bit = $Uni8Bit;
216 last if /^PODTURES$/ ;
220 select +(select($pm), $~ = 'PODTURES')[0];
222 ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
223 $::bundle, $::feature
226 for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
228 $::feature = join ' ', @{$feature_bundle{$_}};
237 read_only_bottom_close_and_rename($pm);
240 ###########################################################################
245 #ifndef PERL_FEATURE_H_
246 #define PERL_FEATURE_H_
248 #if defined(PERL_CORE) || defined (PERL_EXT)
250 #define HINT_FEATURE_SHIFT $HintShift
255 for (@HintedBundles) {
256 (my $key = uc) =~ y/.//d;
257 print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
261 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
263 #define CURRENT_HINTS \
264 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
265 #define CURRENT_FEATURE_BUNDLE \
266 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
268 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
269 the HP-UX cc on PA-RISC */
270 #define FEATURE_IS_ENABLED(name) \
272 & HINT_LOCALIZE_HH) \
273 ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
274 /* The longest string we pass in. */
277 my $longest_internal_feature_name = longest values %feature;
279 #define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
284 sort { length $a <=> length $b || $a cmp $b } keys %feature
287 map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
288 my $name = $feature{$_};
290 if ($last && $first eq 'DEFAULT') { # '>= DEFAULT' warns
292 #define FEATURE_$NAME\_IS_ENABLED \\
294 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
295 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
296 FEATURE_IS_ENABLED("$name")) \\
303 #define FEATURE_$NAME\_IS_ENABLED \\
305 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
306 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
307 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
308 FEATURE_IS_ENABLED("$name")) \\
315 #define FEATURE_$NAME\_IS_ENABLED \\
317 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
318 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
319 FEATURE_IS_ENABLED("$name")) \\
326 #define FEATURE_$NAME\_IS_ENABLED \\
328 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
329 FEATURE_IS_ENABLED("$name") \\
338 #endif /* PERL_CORE or PERL_EXT */
341 PERL_STATIC_INLINE void
342 S_enable_feature_bundle(pTHX_ SV *ver)
344 SV *comp_ver = sv_newmortal();
345 PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
349 for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
351 if ($numver eq '5.10') { $numver = '5.009005' } # special case
352 else { $numver =~ s/\./.0/ } # 5.11 => 5.011
353 (my $macrover = $_) =~ y/.//d;
355 (sv_setnv(comp_ver, $numver),
356 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
357 ? FEATURE_BUNDLE_$macrover :
362 FEATURE_BUNDLE_DEFAULT
363 ) << HINT_FEATURE_SHIFT;
365 assert(PL_curcop == &PL_compiling);
366 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
367 else PL_hints &= ~HINT_UNI_8_BIT;
369 #endif /* PERL_IN_OP_C */
371 #endif /* PERL_FEATURE_H_ */
374 read_only_bottom_close_and_rename($h);
377 ###########################################################################
378 # Template for feature.pm
383 our $VERSION = '1.54';
388 # - think about versioned features (use feature switch => 2)
392 feature - Perl pragma to enable new features
396 use feature qw(say switch);
398 when (1) { say "\$foo == 1" }
399 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
400 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
401 when ($_ > 100) { say "\$foo > 100" }
402 default { say "None of the above" }
405 use feature ':5.10'; # loads all features available in perl 5.10
407 use v5.10; # implicitly loads :5.10 feature bundle
411 It is usually impossible to add new syntax to Perl without breaking
412 some existing programs. This pragma provides a way to minimize that
413 risk. New syntactic constructs, or new semantic meanings to older
414 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
415 only when the appropriate feature pragma is in scope. (Nevertheless, the
416 C<CORE::> prefix provides access to all Perl keywords, regardless of this
419 =head2 Lexical effect
421 Like other pragmas (C<use strict>, for example), features have a lexical
422 effect. C<use feature qw(foo)> will only make the feature "foo" available
423 from that point to the end of the enclosing block.
427 say "say is available here";
429 print "But not here.\n";
433 Features can also be turned off by using C<no feature "foo">. This too
437 say "say is available here";
440 print "But not here.\n";
442 say "Yet it is here.";
444 C<no feature> with no features specified will reset to the default group. To
445 disable I<all> features (an unusual request!) use C<no feature ':all'>.
447 =head1 AVAILABLE FEATURES
449 =head2 The 'say' feature
451 C<use feature 'say'> tells the compiler to enable the Perl 6 style
454 See L<perlfunc/say> for details.
456 This feature is available starting with Perl 5.10.
458 =head2 The 'state' feature
460 C<use feature 'state'> tells the compiler to enable C<state>
463 See L<perlsub/"Persistent Private Variables"> for details.
465 This feature is available starting with Perl 5.10.
467 =head2 The 'switch' feature
469 B<WARNING>: Because the L<smartmatch operator|perlop/"Smartmatch Operator"> is
470 experimental, Perl will warn when you use this feature, unless you have
471 explicitly disabled the warning:
473 no warnings "experimental::smartmatch";
475 C<use feature 'switch'> tells the compiler to enable the Perl 6
476 given/when construct.
478 See L<perlsyn/"Switch Statements"> for details.
480 This feature is available starting with Perl 5.10.
482 =head2 The 'unicode_strings' feature
484 C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
485 in all string operations executed within its scope (unless they are also
486 within the scope of either C<use locale> or C<use bytes>). The same applies
487 to all regular expressions compiled within the scope, even if executed outside
488 it. It does not change the internal representation of strings, but only how
489 they are interpreted.
491 C<no feature 'unicode_strings'> tells the compiler to use the traditional
492 Perl rules wherein the native character set rules is used unless it is
493 clear to Perl that Unicode is desired. This can lead to some surprises
494 when the behavior suddenly changes. (See
495 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
496 potentially using Unicode in your program, the
497 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
499 This feature is available starting with Perl 5.12; was almost fully
500 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>;
501 was extended further in Perl 5.26 to cover L<the range
502 operator|perlop/Range Operators>; and was extended again in Perl 5.28 to
503 cover L<special-cased whitespace splitting|perlfunc/split>.
505 =head2 The 'unicode_eval' and 'evalbytes' features
507 Together, these two features are intended to replace the legacy string
508 C<eval> function, which behaves problematically in some instances. They are
509 available starting with Perl 5.16, and are enabled by default by a
510 S<C<use 5.16>> or higher declaration.
512 C<unicode_eval> changes the behavior of plain string C<eval> to work more
513 consistently, especially in the Unicode world. Certain (mis)behaviors
514 couldn't be changed without breaking some things that had come to rely on
515 them, so the feature can be enabled and disabled. Details are at
516 L<perlfunc/Under the "unicode_eval" feature>.
518 C<evalbytes> is like string C<eval>, but operating on a byte stream that is
519 not UTF-8 encoded. Details are at L<perlfunc/evalbytes EXPR>. Without a
520 S<C<use feature 'evalbytes'>> nor a S<C<use v5.16>> (or higher) declaration in
521 the current scope, you can still access it by instead writing
524 =head2 The 'current_sub' feature
526 This provides the C<__SUB__> token that returns a reference to the current
527 subroutine or C<undef> outside of a subroutine.
529 This feature is available starting with Perl 5.16.
531 =head2 The 'array_base' feature
533 This feature supported the legacy C<$[> variable. See L<perlvar/$[>.
534 It was on by default but disabled under C<use v5.16> (see
535 L</IMPLICIT LOADING>, below) and unavailable since perl 5.30.
537 This feature is available under this name starting with Perl 5.16. In
538 previous versions, it was simply on all the time, and this pragma knew
541 =head2 The 'fc' feature
543 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
544 which implements Unicode casefolding.
546 See L<perlfunc/fc> for details.
548 This feature is available from Perl 5.16 onwards.
550 =head2 The 'lexical_subs' feature
552 In Perl versions prior to 5.26, this feature enabled
553 declaration of subroutines via C<my sub foo>, C<state sub foo>
554 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
556 This feature is available from Perl 5.18 onwards. From Perl 5.18 to 5.24,
557 it was classed as experimental, and Perl emitted a warning for its
558 usage, except when explicitly disabled:
560 no warnings "experimental::lexical_subs";
562 As of Perl 5.26, use of this feature no longer triggers a warning, though
563 the C<experimental::lexical_subs> warning category still exists (for
564 compatibility with code that disables it). In addition, this syntax is
565 not only no longer experimental, but it is enabled for all Perl code,
566 regardless of what feature declarations are in scope.
568 =head2 The 'postderef' and 'postderef_qq' features
570 The 'postderef_qq' feature extends the applicability of L<postfix
571 dereference syntax|perlref/Postfix Dereference Syntax> so that postfix array
572 and scalar dereference are available in double-quotish interpolations. For
573 example, it makes the following two statements equivalent:
575 my $s = "[@{ $h->{a} }]";
576 my $s = "[$h->{a}->@*]";
578 This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it
579 was classed as experimental, and Perl emitted a warning for its
580 usage, except when explicitly disabled:
582 no warnings "experimental::postderef";
584 As of Perl 5.24, use of this feature no longer triggers a warning, though
585 the C<experimental::postderef> warning category still exists (for
586 compatibility with code that disables it).
588 The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable
589 postfix dereference syntax outside double-quotish interpolations. In those
590 versions, using it triggered the C<experimental::postderef> warning in the
591 same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is
592 not only no longer experimental, but it is enabled for all Perl code,
593 regardless of what feature declarations are in scope.
595 =head2 The 'signatures' feature
597 B<WARNING>: This feature is still experimental and the implementation may
598 change in future versions of Perl. For this reason, Perl will
599 warn when you use the feature, unless you have explicitly disabled the
602 no warnings "experimental::signatures";
604 This enables unpacking of subroutine arguments into lexical variables
607 sub foo ($left, $right) {
608 return $left + $right;
611 See L<perlsub/Signatures> for details.
613 This feature is available from Perl 5.20 onwards.
615 =head2 The 'refaliasing' feature
617 B<WARNING>: This feature is still experimental and the implementation may
618 change in future versions of Perl. For this reason, Perl will
619 warn when you use the feature, unless you have explicitly disabled the
622 no warnings "experimental::refaliasing";
624 This enables aliasing via assignment to references:
626 \$a = \$b; # $a and $b now point to the same scalar
627 \@a = \@b; # to the same array
630 foreach \%hash (@array_of_hash_refs) {
634 See L<perlref/Assigning to References> for details.
636 This feature is available from Perl 5.22 onwards.
638 =head2 The 'bitwise' feature
640 This makes the four standard bitwise operators (C<& | ^ ~>) treat their
641 operands consistently as numbers, and introduces four new dotted operators
642 (C<&. |. ^. ~.>) that treat their operands consistently as strings. The
643 same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
645 See L<perlop/Bitwise String Operators> for details.
647 This feature is available from Perl 5.22 onwards. Starting in Perl 5.28,
648 C<use v5.28> will enable the feature. Before 5.28, it was still
649 experimental and would emit a warning in the "experimental::bitwise"
652 =head2 The 'declared_refs' feature
654 B<WARNING>: This feature is still experimental and the implementation may
655 change in future versions of Perl. For this reason, Perl will
656 warn when you use the feature, unless you have explicitly disabled the
659 no warnings "experimental::declared_refs";
661 This allows a reference to a variable to be declared with C<my>, C<state>,
662 our C<our>, or localized with C<local>. It is intended mainly for use in
663 conjunction with the "refaliasing" feature. See L<perlref/Declaring a
664 Reference to a Variable> for examples.
666 This feature is available from Perl 5.26 onwards.
668 =head1 FEATURE BUNDLES
670 It's possible to load multiple features together, using
671 a I<feature bundle>. The name of a feature bundle is prefixed with
672 a colon, to distinguish it from an actual feature.
676 The following feature bundles are available:
678 bundle features included
679 --------- -----------------
681 The C<:default> bundle represents the feature set that is enabled before
682 any C<use feature> or C<no feature> declaration.
684 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
685 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
687 use feature ":5.14.0"; # same as ":5.14"
688 use feature ":5.14.1"; # same as ":5.14"
690 =head1 IMPLICIT LOADING
692 Instead of loading feature bundles by name, it is easier to let Perl do
693 implicit loading of a feature bundle for you.
695 There are two ways to load the C<feature> pragma implicitly:
701 By using the C<-E> switch on the Perl command-line instead of C<-e>.
702 That will enable the feature bundle for that version of Perl in the
703 main compilation unit (that is, the one-liner that follows C<-E>).
707 By explicitly requiring a minimum Perl version number for your program, with
708 the C<use VERSION> construct. That is,
717 and so on. Note how the trailing sub-version
718 is automatically stripped from the
721 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
725 with the same effect.
727 If the required version is older than Perl 5.10, the ":default" feature
728 bundle is automatically loaded instead.
730 Unlike C<use feature ":5.12">, saying C<use v5.12> (or any higher version)
731 also does the equivalent of C<use strict>; see L<perlfunc/use> for details.
741 croak("No features specified");
750 # A bare C<no feature> should reset to the default bundle
752 $^H &= ~($hint_uni8bit|$hint_mask);
762 my $bundle_number = $^H & $hint_mask;
763 my $features = $bundle_number != $hint_mask
764 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
766 # Features are enabled implicitly via bundle hints.
767 # Delete any keys that may be left over from last time.
768 delete @^H{ values(%feature) };
771 $^H{$feature{$_}} = 1;
772 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
777 if (substr($name, 0, 1) eq ":") {
778 my $v = substr($name, 1);
779 if (!exists $feature_bundle{$v}) {
780 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
781 if (!exists $feature_bundle{$v}) {
782 unknown_feature_bundle(substr($name, 1));
785 unshift @_, @{$feature_bundle{$v}};
788 if (!exists $feature{$name}) {
789 if (exists $noops{$name}) {
792 if (!$import && exists $removed{$name}) {
795 unknown_feature($name);
798 $^H{$feature{$name}} = 1;
799 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
801 delete $^H{$feature{$name}};
802 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
807 sub unknown_feature {
809 croak(sprintf('Feature "%s" is not supported by Perl %vd',
813 sub unknown_feature_bundle {
815 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',