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 my @experimental = qw( lexical_subs );
58 ###########################################################################
59 # More data generated from the above
61 for (keys %feature_bundle) {
62 next unless /^5\.(\d*[13579])\z/;
63 $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
66 my %UniqueBundles; # "say state switch" => 5.10
67 my %Aliases; # 5.12 => 5.11
68 for( sort keys %feature_bundle ) {
69 my $value = join(' ', sort @{$feature_bundle{$_}});
70 if (exists $UniqueBundles{$value}) {
71 $Aliases{$_} = $UniqueBundles{$value};
74 $UniqueBundles{$value} = $_;
78 my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
80 sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
83 next if $bund =~ /[^\d.]/ and $bund ne 'default';
84 for (@{$feature_bundle{$bund}}) {
85 if (@{$BundleRanges{$_} ||= []} == 2) {
86 $BundleRanges{$_}[1] = $bund
89 push @{$BundleRanges{$_}}, $bund;
98 open "perl.h", "perl.h" or die "$0 cannot open perl.h: $!";
99 while (readline "perl.h") {
100 next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
101 my $is_u8b = $1 =~ 8;
102 /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
107 my $hex = $HintMask = $1;
108 my $bits = sprintf "%b", oct $1;
109 $bits =~ /^0*1+(0*)\z/
110 or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
111 $HintShift = length $1;
113 length sprintf "%b", scalar keys %UniqueBundles;
114 $bits =~ /1{$bits_needed}/
115 or die "Not enough bits (need $bits_needed)"
116 . " in $bits (binary for $hex):\n\n$_\n ";
118 if ($Uni8Bit && $HintMask) { last }
120 die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
121 die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
126 ('default', grep !/[^\d.]/, sort values %UniqueBundles);
129 ###########################################################################
130 # Open files to be generated
133 open_new($_, '>', { by => 'regen/feature.pl' });
134 } 'lib/feature.pm', 'feature.h';
137 ###########################################################################
138 # Generate lib/feature.pm
141 last if /^FEATURES$/ ;
148 if (!defined $long or length $long < length) {
155 print $pm "our %feature = (\n";
156 my $width = length longest keys %feature;
157 for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
158 print $pm " $_" . " "x($width-length)
159 . " => 'feature_$feature{$_}',\n";
163 print $pm "our %feature_bundle = (\n";
164 $width = length longest values %UniqueBundles;
165 for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
166 keys %UniqueBundles ) {
167 my $bund = $UniqueBundles{$_};
168 print $pm qq' "$bund"' . " "x($width-length $bund)
169 . qq' => [qw($_)],\n';
173 for (sort keys %Aliases) {
175 qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
178 print $pm "my \%experimental = (\n";
179 print $pm " $_ => 1,\n", for @experimental;
184 our \$hint_shift = $HintShift;
185 our \$hint_mask = $HintMask;
186 our \@hint_bundles = qw( @HintedBundles );
188 # This gets set (for now) in \$^H as well as in %^H,
189 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
190 # See HINT_UNI_8_BIT in perl.h.
191 our \$hint_uni8bit = $Uni8Bit;
196 last if /^PODTURES$/ ;
200 select +(select($pm), $~ = 'PODTURES')[0];
202 ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
203 $::bundle, $::feature
206 for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
208 $::feature = join ' ', @{$feature_bundle{$_}};
217 read_only_bottom_close_and_rename($pm);
220 ###########################################################################
225 #if defined(PERL_CORE) || defined (PERL_EXT)
227 #define HINT_FEATURE_SHIFT $HintShift
232 for (@HintedBundles) {
233 (my $key = uc) =~ y/.//d;
234 print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
238 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
240 #define CURRENT_HINTS \
241 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
242 #define CURRENT_FEATURE_BUNDLE \
243 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
245 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
246 the HP-UX cc on PA-RISC */
247 #define FEATURE_IS_ENABLED(name) \
249 & HINT_LOCALIZE_HH) \
250 ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
251 /* The longest string we pass in. */
254 my $longest_internal_feature_name = longest values %feature;
256 #define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
261 sort { length $a <=> length $b || $a cmp $b } keys %feature
264 map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
265 my $name = $feature{$_};
267 if ($last && $first eq 'DEFAULT') { # ‘>= DEFAULT’ warns
269 #define FEATURE_$NAME\_IS_ENABLED \\
271 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
272 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
273 FEATURE_IS_ENABLED("$name")) \\
280 #define FEATURE_$NAME\_IS_ENABLED \\
282 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
283 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
284 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
285 FEATURE_IS_ENABLED("$name")) \\
292 #define FEATURE_$NAME\_IS_ENABLED \\
294 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
295 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
296 FEATURE_IS_ENABLED("$name")) \\
303 #define FEATURE_$NAME\_IS_ENABLED \\
305 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
306 FEATURE_IS_ENABLED("$name") \\
315 #endif /* PERL_CORE or PERL_EXT */
318 PERL_STATIC_INLINE void
319 S_enable_feature_bundle(pTHX_ SV *ver)
321 SV *comp_ver = sv_newmortal();
322 PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
326 for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
328 if ($numver eq '5.10') { $numver = '5.009005' } # special case
329 else { $numver =~ s/\./.0/ } # 5.11 => 5.011
330 (my $macrover = $_) =~ y/.//d;
332 (sv_setnv(comp_ver, $numver),
333 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
334 ? FEATURE_BUNDLE_$macrover :
339 FEATURE_BUNDLE_DEFAULT
340 ) << HINT_FEATURE_SHIFT;
342 assert(PL_curcop == &PL_compiling);
343 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
344 else PL_hints &= ~HINT_UNI_8_BIT;
346 #endif /* PERL_IN_OP_C */
349 read_only_bottom_close_and_rename($h);
352 ###########################################################################
353 # Template for feature.pm
358 our $VERSION = '1.31';
363 # - think about versioned features (use feature switch => 2)
367 feature - Perl pragma to enable new features
371 use feature qw(say switch);
373 when (1) { say "\$foo == 1" }
374 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
375 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
376 when ($_ > 100) { say "\$foo > 100" }
377 default { say "None of the above" }
380 use feature ':5.10'; # loads all features available in perl 5.10
382 use v5.10; # implicitly loads :5.10 feature bundle
386 It is usually impossible to add new syntax to Perl without breaking
387 some existing programs. This pragma provides a way to minimize that
388 risk. New syntactic constructs, or new semantic meanings to older
389 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
390 only when the appropriate feature pragma is in scope. (Nevertheless, the
391 C<CORE::> prefix provides access to all Perl keywords, regardless of this
394 =head2 Lexical effect
396 Like other pragmas (C<use strict>, for example), features have a lexical
397 effect. C<use feature qw(foo)> will only make the feature "foo" available
398 from that point to the end of the enclosing block.
402 say "say is available here";
404 print "But not here.\n";
408 Features can also be turned off by using C<no feature "foo">. This too
412 say "say is available here";
415 print "But not here.\n";
417 say "Yet it is here.";
419 C<no feature> with no features specified will reset to the default group. To
420 disable I<all> features (an unusual request!) use C<no feature ':all'>.
422 =head1 AVAILABLE FEATURES
424 =head2 The 'say' feature
426 C<use feature 'say'> tells the compiler to enable the Perl 6 style
429 See L<perlfunc/say> for details.
431 This feature is available starting with Perl 5.10.
433 =head2 The 'state' feature
435 C<use feature 'state'> tells the compiler to enable C<state>
438 See L<perlsub/"Persistent Private Variables"> for details.
440 This feature is available starting with Perl 5.10.
442 =head2 The 'switch' feature
444 C<use feature 'switch'> tells the compiler to enable the Perl 6
445 given/when construct.
447 See L<perlsyn/"Switch Statements"> for details.
449 This feature is available starting with Perl 5.10.
451 =head2 The 'unicode_strings' feature
453 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
454 in all string operations executed within its scope (unless they are also
455 within the scope of either C<use locale> or C<use bytes>). The same applies
456 to all regular expressions compiled within the scope, even if executed outside
457 it. It does not change the internal representation of strings, but only how
458 they are interpreted.
460 C<no feature 'unicode_strings'> tells the compiler to use the traditional
461 Perl semantics wherein the native character set semantics is used unless it is
462 clear to Perl that Unicode is desired. This can lead to some surprises
463 when the behavior suddenly changes. (See
464 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
465 potentially using Unicode in your program, the
466 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
468 This feature is available starting with Perl 5.12; was almost fully
469 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
471 =head2 The 'unicode_eval' and 'evalbytes' features
473 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
474 string, will evaluate it as a string of characters, ignoring any
475 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
476 the script, which only makes sense for a stream of bytes, not a string of
477 characters. Source filters are forbidden, as they also really only make
478 sense on strings of bytes. Any attempt to activate a source filter will
481 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
482 the argument passed to it as a string of bytes. It dies if the string
483 contains any characters outside the 8-bit range. Source filters work
484 within C<evalbytes>: they apply to the contents of the string being
487 Together, these two features are intended to replace the historical C<eval>
488 function, which has (at least) two bugs in it, that cannot easily be fixed
489 without breaking existing programs:
495 C<eval> behaves differently depending on the internal encoding of the
496 string, sometimes treating its argument as a string of bytes, and sometimes
497 as a string of characters.
501 Source filters activated within C<eval> leak out into whichever I<file>
502 scope is currently being compiled. To give an example with the CPAN module
505 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
508 C<evalbytes> fixes that to work the way one would expect:
510 use feature "evalbytes";
511 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
516 These two features are available starting with Perl 5.16.
518 =head2 The 'current_sub' feature
520 This provides the C<__SUB__> token that returns a reference to the current
521 subroutine or C<undef> outside of a subroutine.
523 This feature is available starting with Perl 5.16.
525 =head2 The 'array_base' feature
527 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
528 L<arybase>. It is on by default but disabled under C<use v5.16> (see
529 L</IMPLICIT LOADING>, below).
531 This feature is available under this name starting with Perl 5.16. In
532 previous versions, it was simply on all the time, and this pragma knew
535 =head2 The 'fc' feature
537 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
538 which implements Unicode casefolding.
540 See L<perlfunc/fc> for details.
542 This feature is available from Perl 5.16 onwards.
544 =head2 The 'lexical_subs' feature
546 B<WARNING>: This feature is still experimental and the implementation may
547 change in future versions of Perl. For this reason, F<feature.pm> will
548 warn when you enable the feature, unless you have explicitly disabled the
551 no warnings "experimental::lexical_subs";
553 This enables 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.
558 =head1 FEATURE BUNDLES
560 It's possible to load multiple features together, using
561 a I<feature bundle>. The name of a feature bundle is prefixed with
562 a colon, to distinguish it from an actual feature.
566 The following feature bundles are available:
568 bundle features included
569 --------- -----------------
571 The C<:default> bundle represents the feature set that is enabled before
572 any C<use feature> or C<no feature> declaration.
574 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
575 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
577 use feature ":5.14.0"; # same as ":5.14"
578 use feature ":5.14.1"; # same as ":5.14"
580 =head1 IMPLICIT LOADING
582 Instead of loading feature bundles by name, it is easier to let Perl do
583 implicit loading of a feature bundle for you.
585 There are two ways to load the C<feature> pragma implicitly:
591 By using the C<-E> switch on the Perl command-line instead of C<-e>.
592 That will enable the feature bundle for that version of Perl in the
593 main compilation unit (that is, the one-liner that follows C<-E>).
597 By explicitly requiring a minimum Perl version number for your program, with
598 the C<use VERSION> construct. That is,
607 and so on. Note how the trailing sub-version
608 is automatically stripped from the
611 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
615 with the same effect.
617 If the required version is older than Perl 5.10, the ":default" feature
618 bundle is automatically loaded instead.
628 croak("No features specified");
637 # A bare C<no feature> should reset to the default bundle
639 $^H &= ~($hint_uni8bit|$hint_mask);
649 my $bundle_number = $^H & $hint_mask;
650 my $features = $bundle_number != $hint_mask
651 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
653 # Features are enabled implicitly via bundle hints.
654 # Delete any keys that may be left over from last time.
655 delete @^H{ values(%feature) };
658 $^H{$feature{$_}} = 1;
659 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
664 if (substr($name, 0, 1) eq ":") {
665 my $v = substr($name, 1);
666 if (!exists $feature_bundle{$v}) {
667 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
668 if (!exists $feature_bundle{$v}) {
669 unknown_feature_bundle(substr($name, 1));
672 unshift @_, @{$feature_bundle{$v}};
675 if (!exists $feature{$name}) {
676 unknown_feature($name);
679 $^H{$feature{$name}} = 1;
680 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
681 if ($experimental{$name}) {
683 warnings::warnif("experimental::$name",
684 "The $name feature is experimental");
687 delete $^H{$feature{$name}};
688 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
693 sub unknown_feature {
695 croak(sprintf('Feature "%s" is not supported by Perl %vd',
699 sub unknown_feature_bundle {
701 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',