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 array_base => 'arybase',
30 current_sub => '__SUB__',
31 lexical_subs => 'lexsubs',
32 unicode_eval => 'unieval',
33 unicode_strings => 'unicode',
37 # NOTE: If a feature is ever enabled in a non-contiguous range of Perl
38 # versions, any code below that uses %BundleRanges will have to
39 # be changed to account.
41 # 5.odd implies the next 5.even, but an explicit 5.even can override it.
42 my %feature_bundle = (
43 all => [ keys %feature ],
44 default => [qw(array_base)],
45 "5.9.5" => [qw(say state switch array_base)],
46 "5.10" => [qw(say state switch array_base)],
47 "5.11" => [qw(say state switch unicode_strings array_base)],
48 "5.13" => [qw(say state switch unicode_strings array_base)],
49 "5.15" => [qw(say state switch unicode_strings unicode_eval
50 evalbytes current_sub fc)],
51 "5.17" => [qw(say state switch unicode_strings unicode_eval
52 evalbytes current_sub fc)],
55 # not actually used currently
56 my @experimental = qw( lexical_subs );
59 ###########################################################################
60 # More data generated from the above
62 for (keys %feature_bundle) {
63 next unless /^5\.(\d*[13579])\z/;
64 $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
67 my %UniqueBundles; # "say state switch" => 5.10
68 my %Aliases; # 5.12 => 5.11
69 for( sort keys %feature_bundle ) {
70 my $value = join(' ', sort @{$feature_bundle{$_}});
71 if (exists $UniqueBundles{$value}) {
72 $Aliases{$_} = $UniqueBundles{$value};
75 $UniqueBundles{$value} = $_;
79 my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
81 sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
84 next if $bund =~ /[^\d.]/ and $bund ne 'default';
85 for (@{$feature_bundle{$bund}}) {
86 if (@{$BundleRanges{$_} ||= []} == 2) {
87 $BundleRanges{$_}[1] = $bund
90 push @{$BundleRanges{$_}}, $bund;
99 open "perl.h", "perl.h" or die "$0 cannot open perl.h: $!";
100 while (readline "perl.h") {
101 next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
102 my $is_u8b = $1 =~ 8;
103 /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
108 my $hex = $HintMask = $1;
109 my $bits = sprintf "%b", oct $1;
110 $bits =~ /^0*1+(0*)\z/
111 or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
112 $HintShift = length $1;
114 length sprintf "%b", scalar keys %UniqueBundles;
115 $bits =~ /1{$bits_needed}/
116 or die "Not enough bits (need $bits_needed)"
117 . " in $bits (binary for $hex):\n\n$_\n ";
119 if ($Uni8Bit && $HintMask) { last }
121 die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
122 die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
127 ('default', grep !/[^\d.]/, sort values %UniqueBundles);
130 ###########################################################################
131 # Open files to be generated
134 open_new($_, '>', { by => 'regen/feature.pl' });
135 } 'lib/feature.pm', 'feature.h';
138 ###########################################################################
139 # Generate lib/feature.pm
142 last if /^FEATURES$/ ;
149 if (!defined $long or length $long < length) {
156 print $pm "our %feature = (\n";
157 my $width = length longest keys %feature;
158 for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
159 print $pm " $_" . " "x($width-length)
160 . " => 'feature_$feature{$_}',\n";
164 print $pm "our %feature_bundle = (\n";
165 $width = length longest values %UniqueBundles;
166 for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
167 keys %UniqueBundles ) {
168 my $bund = $UniqueBundles{$_};
169 print $pm qq' "$bund"' . " "x($width-length $bund)
170 . qq' => [qw($_)],\n';
174 for (sort keys %Aliases) {
176 qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
179 #print $pm "my \%experimental = (\n";
180 #print $pm " $_ => 1,\n", for @experimental;
185 our \$hint_shift = $HintShift;
186 our \$hint_mask = $HintMask;
187 our \@hint_bundles = qw( @HintedBundles );
189 # This gets set (for now) in \$^H as well as in %^H,
190 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
191 # See HINT_UNI_8_BIT in perl.h.
192 our \$hint_uni8bit = $Uni8Bit;
197 last if /^PODTURES$/ ;
201 select +(select($pm), $~ = 'PODTURES')[0];
203 ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
204 $::bundle, $::feature
207 for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
209 $::feature = join ' ', @{$feature_bundle{$_}};
218 read_only_bottom_close_and_rename($pm);
221 ###########################################################################
226 #if defined(PERL_CORE) || defined (PERL_EXT)
228 #define HINT_FEATURE_SHIFT $HintShift
233 for (@HintedBundles) {
234 (my $key = uc) =~ y/.//d;
235 print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
239 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
241 #define CURRENT_HINTS \
242 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
243 #define CURRENT_FEATURE_BUNDLE \
244 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
246 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
247 the HP-UX cc on PA-RISC */
248 #define FEATURE_IS_ENABLED(name) \
250 & HINT_LOCALIZE_HH) \
251 ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
252 /* The longest string we pass in. */
255 my $longest_internal_feature_name = longest values %feature;
257 #define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
262 sort { length $a <=> length $b || $a cmp $b } keys %feature
265 map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
266 my $name = $feature{$_};
268 if ($last && $first eq 'DEFAULT') { # ‘>= DEFAULT’ warns
270 #define FEATURE_$NAME\_IS_ENABLED \\
272 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
273 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
274 FEATURE_IS_ENABLED("$name")) \\
281 #define FEATURE_$NAME\_IS_ENABLED \\
283 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
284 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
285 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
286 FEATURE_IS_ENABLED("$name")) \\
293 #define FEATURE_$NAME\_IS_ENABLED \\
295 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
296 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
297 FEATURE_IS_ENABLED("$name")) \\
304 #define FEATURE_$NAME\_IS_ENABLED \\
306 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
307 FEATURE_IS_ENABLED("$name") \\
316 #endif /* PERL_CORE or PERL_EXT */
319 PERL_STATIC_INLINE void
320 S_enable_feature_bundle(pTHX_ SV *ver)
322 SV *comp_ver = sv_newmortal();
323 PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
327 for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
329 if ($numver eq '5.10') { $numver = '5.009005' } # special case
330 else { $numver =~ s/\./.0/ } # 5.11 => 5.011
331 (my $macrover = $_) =~ y/.//d;
333 (sv_setnv(comp_ver, $numver),
334 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
335 ? FEATURE_BUNDLE_$macrover :
340 FEATURE_BUNDLE_DEFAULT
341 ) << HINT_FEATURE_SHIFT;
343 assert(PL_curcop == &PL_compiling);
344 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
345 else PL_hints &= ~HINT_UNI_8_BIT;
347 #endif /* PERL_IN_OP_C */
350 read_only_bottom_close_and_rename($h);
353 ###########################################################################
354 # Template for feature.pm
359 our $VERSION = '1.31';
364 # - think about versioned features (use feature switch => 2)
368 feature - Perl pragma to enable new features
372 use feature qw(say switch);
374 when (1) { say "\$foo == 1" }
375 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
376 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
377 when ($_ > 100) { say "\$foo > 100" }
378 default { say "None of the above" }
381 use feature ':5.10'; # loads all features available in perl 5.10
383 use v5.10; # implicitly loads :5.10 feature bundle
387 It is usually impossible to add new syntax to Perl without breaking
388 some existing programs. This pragma provides a way to minimize that
389 risk. New syntactic constructs, or new semantic meanings to older
390 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
391 only when the appropriate feature pragma is in scope. (Nevertheless, the
392 C<CORE::> prefix provides access to all Perl keywords, regardless of this
395 =head2 Lexical effect
397 Like other pragmas (C<use strict>, for example), features have a lexical
398 effect. C<use feature qw(foo)> will only make the feature "foo" available
399 from that point to the end of the enclosing block.
403 say "say is available here";
405 print "But not here.\n";
409 Features can also be turned off by using C<no feature "foo">. This too
413 say "say is available here";
416 print "But not here.\n";
418 say "Yet it is here.";
420 C<no feature> with no features specified will reset to the default group. To
421 disable I<all> features (an unusual request!) use C<no feature ':all'>.
423 =head1 AVAILABLE FEATURES
425 =head2 The 'say' feature
427 C<use feature 'say'> tells the compiler to enable the Perl 6 style
430 See L<perlfunc/say> for details.
432 This feature is available starting with Perl 5.10.
434 =head2 The 'state' feature
436 C<use feature 'state'> tells the compiler to enable C<state>
439 See L<perlsub/"Persistent Private Variables"> for details.
441 This feature is available starting with Perl 5.10.
443 =head2 The 'switch' feature
445 C<use feature 'switch'> tells the compiler to enable the Perl 6
446 given/when construct.
448 See L<perlsyn/"Switch Statements"> for details.
450 This feature is available starting with Perl 5.10.
452 =head2 The 'unicode_strings' feature
454 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
455 in all string operations executed within its scope (unless they are also
456 within the scope of either C<use locale> or C<use bytes>). The same applies
457 to all regular expressions compiled within the scope, even if executed outside
458 it. It does not change the internal representation of strings, but only how
459 they are interpreted.
461 C<no feature 'unicode_strings'> tells the compiler to use the traditional
462 Perl semantics wherein the native character set semantics is used unless it is
463 clear to Perl that Unicode is desired. This can lead to some surprises
464 when the behavior suddenly changes. (See
465 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
466 potentially using Unicode in your program, the
467 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
469 This feature is available starting with Perl 5.12; was almost fully
470 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
472 =head2 The 'unicode_eval' and 'evalbytes' features
474 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
475 string, will evaluate it as a string of characters, ignoring any
476 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
477 the script, which only makes sense for a stream of bytes, not a string of
478 characters. Source filters are forbidden, as they also really only make
479 sense on strings of bytes. Any attempt to activate a source filter will
482 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
483 the argument passed to it as a string of bytes. It dies if the string
484 contains any characters outside the 8-bit range. Source filters work
485 within C<evalbytes>: they apply to the contents of the string being
488 Together, these two features are intended to replace the historical C<eval>
489 function, which has (at least) two bugs in it, that cannot easily be fixed
490 without breaking existing programs:
496 C<eval> behaves differently depending on the internal encoding of the
497 string, sometimes treating its argument as a string of bytes, and sometimes
498 as a string of characters.
502 Source filters activated within C<eval> leak out into whichever I<file>
503 scope is currently being compiled. To give an example with the CPAN module
506 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
509 C<evalbytes> fixes that to work the way one would expect:
511 use feature "evalbytes";
512 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
517 These two features are available starting with Perl 5.16.
519 =head2 The 'current_sub' feature
521 This provides the C<__SUB__> token that returns a reference to the current
522 subroutine or C<undef> outside of a subroutine.
524 This feature is available starting with Perl 5.16.
526 =head2 The 'array_base' feature
528 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
529 L<arybase>. It is on by default but disabled under C<use v5.16> (see
530 L</IMPLICIT LOADING>, below).
532 This feature is available under this name starting with Perl 5.16. In
533 previous versions, it was simply on all the time, and this pragma knew
536 =head2 The 'fc' feature
538 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
539 which implements Unicode casefolding.
541 See L<perlfunc/fc> for details.
543 This feature is available from Perl 5.16 onwards.
545 =head2 The 'lexical_subs' feature
547 B<WARNING>: This feature is still experimental and the implementation may
548 change in future versions of Perl. For this reason, Perl will
549 warn when you use the feature, unless you have explicitly disabled the
552 no warnings "experimental::lexical_subs";
554 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
555 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
557 This feature is available from Perl 5.18 onwards.
559 =head1 FEATURE BUNDLES
561 It's possible to load multiple features together, using
562 a I<feature bundle>. The name of a feature bundle is prefixed with
563 a colon, to distinguish it from an actual feature.
567 The following feature bundles are available:
569 bundle features included
570 --------- -----------------
572 The C<:default> bundle represents the feature set that is enabled before
573 any C<use feature> or C<no feature> declaration.
575 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
576 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
578 use feature ":5.14.0"; # same as ":5.14"
579 use feature ":5.14.1"; # same as ":5.14"
581 =head1 IMPLICIT LOADING
583 Instead of loading feature bundles by name, it is easier to let Perl do
584 implicit loading of a feature bundle for you.
586 There are two ways to load the C<feature> pragma implicitly:
592 By using the C<-E> switch on the Perl command-line instead of C<-e>.
593 That will enable the feature bundle for that version of Perl in the
594 main compilation unit (that is, the one-liner that follows C<-E>).
598 By explicitly requiring a minimum Perl version number for your program, with
599 the C<use VERSION> construct. That is,
608 and so on. Note how the trailing sub-version
609 is automatically stripped from the
612 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
616 with the same effect.
618 If the required version is older than Perl 5.10, the ":default" feature
619 bundle is automatically loaded instead.
629 croak("No features specified");
638 # A bare C<no feature> should reset to the default bundle
640 $^H &= ~($hint_uni8bit|$hint_mask);
650 my $bundle_number = $^H & $hint_mask;
651 my $features = $bundle_number != $hint_mask
652 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
654 # Features are enabled implicitly via bundle hints.
655 # Delete any keys that may be left over from last time.
656 delete @^H{ values(%feature) };
659 $^H{$feature{$_}} = 1;
660 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
665 if (substr($name, 0, 1) eq ":") {
666 my $v = substr($name, 1);
667 if (!exists $feature_bundle{$v}) {
668 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
669 if (!exists $feature_bundle{$v}) {
670 unknown_feature_bundle(substr($name, 1));
673 unshift @_, @{$feature_bundle{$v}};
676 if (!exists $feature{$name}) {
677 unknown_feature($name);
680 $^H{$feature{$name}} = 1;
681 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
683 delete $^H{$feature{$name}};
684 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
689 sub unknown_feature {
691 croak(sprintf('Feature "%s" is not supported by Perl %vd',
695 sub unknown_feature_bundle {
697 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',