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)
28 evalbytes => 'evalbytes',
29 postderef => 'postderef',
30 array_base => 'arybase',
31 current_sub => '__SUB__',
32 lexical_subs => 'lexsubs',
33 postderef_qq => 'postderef_qq',
34 unicode_eval => 'unieval',
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 ],
47 default => [qw(array_base)],
48 "5.9.5" => [qw(say state switch array_base)],
49 "5.10" => [qw(say state switch array_base)],
50 "5.11" => [qw(say state switch unicode_strings array_base)],
51 "5.13" => [qw(say state switch unicode_strings array_base)],
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)],
62 # not actually used currently
63 my @experimental = qw( lexical_subs );
66 ###########################################################################
67 # More data generated from the above
69 for (keys %feature_bundle) {
70 next unless /^5\.(\d*[13579])\z/;
71 $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
74 my %UniqueBundles; # "say state switch" => 5.10
75 my %Aliases; # 5.12 => 5.11
76 for( sort keys %feature_bundle ) {
77 my $value = join(' ', sort @{$feature_bundle{$_}});
78 if (exists $UniqueBundles{$value}) {
79 $Aliases{$_} = $UniqueBundles{$value};
82 $UniqueBundles{$value} = $_;
86 my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
88 sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
91 next if $bund =~ /[^\d.]/ and $bund ne 'default';
92 for (@{$feature_bundle{$bund}}) {
93 if (@{$BundleRanges{$_} ||= []} == 2) {
94 $BundleRanges{$_}[1] = $bund
97 push @{$BundleRanges{$_}}, $bund;
106 open "perl.h", "perl.h" or die "$0 cannot open perl.h: $!";
107 while (readline "perl.h") {
108 next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
109 my $is_u8b = $1 =~ 8;
110 /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
115 my $hex = $HintMask = $1;
116 my $bits = sprintf "%b", oct $1;
117 $bits =~ /^0*1+(0*)\z/
118 or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
119 $HintShift = length $1;
121 length sprintf "%b", scalar keys %UniqueBundles;
122 $bits =~ /1{$bits_needed}/
123 or die "Not enough bits (need $bits_needed)"
124 . " in $bits (binary for $hex):\n\n$_\n ";
126 if ($Uni8Bit && $HintMask) { last }
128 die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
129 die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
134 ('default', grep !/[^\d.]/, sort values %UniqueBundles);
137 ###########################################################################
138 # Open files to be generated
141 open_new($_, '>', { by => 'regen/feature.pl' });
142 } 'lib/feature.pm', 'feature.h';
145 ###########################################################################
146 # Generate lib/feature.pm
149 last if /^FEATURES$/ ;
156 if (!defined $long or length $long < length) {
163 print $pm "our %feature = (\n";
164 my $width = length longest keys %feature;
165 for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
166 print $pm " $_" . " "x($width-length)
167 . " => 'feature_$feature{$_}',\n";
171 print $pm "our %feature_bundle = (\n";
172 $width = length longest values %UniqueBundles;
173 for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
174 keys %UniqueBundles ) {
175 my $bund = $UniqueBundles{$_};
176 print $pm qq' "$bund"' . " "x($width-length $bund)
177 . qq' => [qw($_)],\n';
181 for (sort keys %Aliases) {
183 qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
186 #print $pm "my \%experimental = (\n";
187 #print $pm " $_ => 1,\n", for @experimental;
192 our \$hint_shift = $HintShift;
193 our \$hint_mask = $HintMask;
194 our \@hint_bundles = qw( @HintedBundles );
196 # This gets set (for now) in \$^H as well as in %^H,
197 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
198 # See HINT_UNI_8_BIT in perl.h.
199 our \$hint_uni8bit = $Uni8Bit;
204 last if /^PODTURES$/ ;
208 select +(select($pm), $~ = 'PODTURES')[0];
210 ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
211 $::bundle, $::feature
214 for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
216 $::feature = join ' ', @{$feature_bundle{$_}};
225 read_only_bottom_close_and_rename($pm);
228 ###########################################################################
233 #if defined(PERL_CORE) || defined (PERL_EXT)
235 #define HINT_FEATURE_SHIFT $HintShift
240 for (@HintedBundles) {
241 (my $key = uc) =~ y/.//d;
242 print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
246 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
248 #define CURRENT_HINTS \
249 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
250 #define CURRENT_FEATURE_BUNDLE \
251 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
253 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
254 the HP-UX cc on PA-RISC */
255 #define FEATURE_IS_ENABLED(name) \
257 & HINT_LOCALIZE_HH) \
258 ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
259 /* The longest string we pass in. */
262 my $longest_internal_feature_name = longest values %feature;
264 #define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
269 sort { length $a <=> length $b || $a cmp $b } keys %feature
272 map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
273 my $name = $feature{$_};
275 if ($last && $first eq 'DEFAULT') { # ‘>= DEFAULT’ warns
277 #define FEATURE_$NAME\_IS_ENABLED \\
279 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
280 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
281 FEATURE_IS_ENABLED("$name")) \\
288 #define FEATURE_$NAME\_IS_ENABLED \\
290 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
291 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
292 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
293 FEATURE_IS_ENABLED("$name")) \\
300 #define FEATURE_$NAME\_IS_ENABLED \\
302 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
303 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
304 FEATURE_IS_ENABLED("$name")) \\
311 #define FEATURE_$NAME\_IS_ENABLED \\
313 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
314 FEATURE_IS_ENABLED("$name") \\
323 #endif /* PERL_CORE or PERL_EXT */
326 PERL_STATIC_INLINE void
327 S_enable_feature_bundle(pTHX_ SV *ver)
329 SV *comp_ver = sv_newmortal();
330 PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
334 for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
336 if ($numver eq '5.10') { $numver = '5.009005' } # special case
337 else { $numver =~ s/\./.0/ } # 5.11 => 5.011
338 (my $macrover = $_) =~ y/.//d;
340 (sv_setnv(comp_ver, $numver),
341 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
342 ? FEATURE_BUNDLE_$macrover :
347 FEATURE_BUNDLE_DEFAULT
348 ) << HINT_FEATURE_SHIFT;
350 assert(PL_curcop == &PL_compiling);
351 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
352 else PL_hints &= ~HINT_UNI_8_BIT;
354 #endif /* PERL_IN_OP_C */
357 read_only_bottom_close_and_rename($h);
360 ###########################################################################
361 # Template for feature.pm
366 our $VERSION = '1.37';
371 # - think about versioned features (use feature switch => 2)
375 feature - Perl pragma to enable new features
379 use feature qw(say switch);
381 when (1) { say "\$foo == 1" }
382 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
383 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
384 when ($_ > 100) { say "\$foo > 100" }
385 default { say "None of the above" }
388 use feature ':5.10'; # loads all features available in perl 5.10
390 use v5.10; # implicitly loads :5.10 feature bundle
394 It is usually impossible to add new syntax to Perl without breaking
395 some existing programs. This pragma provides a way to minimize that
396 risk. New syntactic constructs, or new semantic meanings to older
397 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
398 only when the appropriate feature pragma is in scope. (Nevertheless, the
399 C<CORE::> prefix provides access to all Perl keywords, regardless of this
402 =head2 Lexical effect
404 Like other pragmas (C<use strict>, for example), features have a lexical
405 effect. C<use feature qw(foo)> will only make the feature "foo" available
406 from that point to the end of the enclosing block.
410 say "say is available here";
412 print "But not here.\n";
416 Features can also be turned off by using C<no feature "foo">. This too
420 say "say is available here";
423 print "But not here.\n";
425 say "Yet it is here.";
427 C<no feature> with no features specified will reset to the default group. To
428 disable I<all> features (an unusual request!) use C<no feature ':all'>.
430 =head1 AVAILABLE FEATURES
432 =head2 The 'say' feature
434 C<use feature 'say'> tells the compiler to enable the Perl 6 style
437 See L<perlfunc/say> for details.
439 This feature is available starting with Perl 5.10.
441 =head2 The 'state' feature
443 C<use feature 'state'> tells the compiler to enable C<state>
446 See L<perlsub/"Persistent Private Variables"> for details.
448 This feature is available starting with Perl 5.10.
450 =head2 The 'switch' feature
452 C<use feature 'switch'> tells the compiler to enable the Perl 6
453 given/when construct.
455 See L<perlsyn/"Switch Statements"> for details.
457 This feature is available starting with Perl 5.10.
459 =head2 The 'unicode_strings' feature
461 C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
462 in all string operations executed within its scope (unless they are also
463 within the scope of either C<use locale> or C<use bytes>). The same applies
464 to all regular expressions compiled within the scope, even if executed outside
465 it. It does not change the internal representation of strings, but only how
466 they are interpreted.
468 C<no feature 'unicode_strings'> tells the compiler to use the traditional
469 Perl rules wherein the native character set rules is used unless it is
470 clear to Perl that Unicode is desired. This can lead to some surprises
471 when the behavior suddenly changes. (See
472 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
473 potentially using Unicode in your program, the
474 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
476 This feature is available starting with Perl 5.12; was almost fully
477 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
479 =head2 The 'unicode_eval' and 'evalbytes' features
481 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
482 string, will evaluate it as a string of characters, ignoring any
483 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
484 the script, which only makes sense for a stream of bytes, not a string of
485 characters. Source filters are forbidden, as they also really only make
486 sense on strings of bytes. Any attempt to activate a source filter will
489 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
490 the argument passed to it as a string of bytes. It dies if the string
491 contains any characters outside the 8-bit range. Source filters work
492 within C<evalbytes>: they apply to the contents of the string being
495 Together, these two features are intended to replace the historical C<eval>
496 function, which has (at least) two bugs in it, that cannot easily be fixed
497 without breaking existing programs:
503 C<eval> behaves differently depending on the internal encoding of the
504 string, sometimes treating its argument as a string of bytes, and sometimes
505 as a string of characters.
509 Source filters activated within C<eval> leak out into whichever I<file>
510 scope is currently being compiled. To give an example with the CPAN module
513 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
516 C<evalbytes> fixes that to work the way one would expect:
518 use feature "evalbytes";
519 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
524 These two features are available starting with Perl 5.16.
526 =head2 The 'current_sub' feature
528 This provides the C<__SUB__> token that returns a reference to the current
529 subroutine or C<undef> outside of a subroutine.
531 This feature is available starting with Perl 5.16.
533 =head2 The 'array_base' feature
535 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
536 L<arybase>. It is on by default but disabled under C<use v5.16> (see
537 L</IMPLICIT LOADING>, below).
539 This feature is available under this name starting with Perl 5.16. In
540 previous versions, it was simply on all the time, and this pragma knew
543 =head2 The 'fc' feature
545 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
546 which implements Unicode casefolding.
548 See L<perlfunc/fc> for details.
550 This feature is available from Perl 5.16 onwards.
552 =head2 The 'lexical_subs' feature
554 B<WARNING>: This feature is still experimental and the implementation may
555 change in future versions of Perl. For this reason, Perl will
556 warn when you use the feature, unless you have explicitly disabled the
559 no warnings "experimental::lexical_subs";
561 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
562 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
564 This feature is available from Perl 5.18 onwards.
566 =head2 The 'signatures' feature
568 B<WARNING>: This feature is still experimental and the implementation may
569 change in future versions of Perl. For this reason, Perl will
570 warn when you use the feature, unless you have explicitly disabled the
573 no warnings "experimental::signatures";
575 This enables unpacking of subroutine arguments into lexical variables
578 sub foo ($left, $right) {
579 return $left + $right;
582 See L<perlsub/Signatures> for details.
584 This feature is available from Perl 5.20 onwards.
586 =head1 FEATURE BUNDLES
588 It's possible to load multiple features together, using
589 a I<feature bundle>. The name of a feature bundle is prefixed with
590 a colon, to distinguish it from an actual feature.
594 The following feature bundles are available:
596 bundle features included
597 --------- -----------------
599 The C<:default> bundle represents the feature set that is enabled before
600 any C<use feature> or C<no feature> declaration.
602 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
603 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
605 use feature ":5.14.0"; # same as ":5.14"
606 use feature ":5.14.1"; # same as ":5.14"
608 =head1 IMPLICIT LOADING
610 Instead of loading feature bundles by name, it is easier to let Perl do
611 implicit loading of a feature bundle for you.
613 There are two ways to load the C<feature> pragma implicitly:
619 By using the C<-E> switch on the Perl command-line instead of C<-e>.
620 That will enable the feature bundle for that version of Perl in the
621 main compilation unit (that is, the one-liner that follows C<-E>).
625 By explicitly requiring a minimum Perl version number for your program, with
626 the C<use VERSION> construct. That is,
635 and so on. Note how the trailing sub-version
636 is automatically stripped from the
639 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
643 with the same effect.
645 If the required version is older than Perl 5.10, the ":default" feature
646 bundle is automatically loaded instead.
656 croak("No features specified");
665 # A bare C<no feature> should reset to the default bundle
667 $^H &= ~($hint_uni8bit|$hint_mask);
677 my $bundle_number = $^H & $hint_mask;
678 my $features = $bundle_number != $hint_mask
679 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
681 # Features are enabled implicitly via bundle hints.
682 # Delete any keys that may be left over from last time.
683 delete @^H{ values(%feature) };
686 $^H{$feature{$_}} = 1;
687 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
692 if (substr($name, 0, 1) eq ":") {
693 my $v = substr($name, 1);
694 if (!exists $feature_bundle{$v}) {
695 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
696 if (!exists $feature_bundle{$v}) {
697 unknown_feature_bundle(substr($name, 1));
700 unshift @_, @{$feature_bundle{$v}};
703 if (!exists $feature{$name}) {
704 unknown_feature($name);
707 $^H{$feature{$name}} = 1;
708 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
710 delete $^H{$feature{$name}};
711 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
716 sub unknown_feature {
718 croak(sprintf('Feature "%s" is not supported by Perl %vd',
722 sub unknown_feature_bundle {
724 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',