[perl #120826] correct documentation of sv parameter of call_sv()
[perl.git] / regen / feature.pl
1 #!/usr/bin/perl
2
3 # Regenerate (overwriting only if changed):
4 #
5 #    lib/feature.pm
6 #    feature.h
7 #
8 # from information hardcoded into this script and from two #defines
9 # in perl.h.
10 #
11 # This script is normally invoked from regen.pl.
12
13 BEGIN {
14     require 'regen/regen_lib.pl';
15     push @INC, './lib';
16 }
17 use strict ;
18
19
20 ###########################################################################
21 # Hand-editable data
22
23 # (feature name) => (internal name, used in %^H and macro names)
24 my %feature = (
25     say             => 'say',
26     state           => 'state',
27     switch          => 'switch',
28     bitwise         => 'bitwise',
29     evalbytes       => 'evalbytes',
30     postderef       => 'postderef',
31     array_base      => 'arybase',
32     current_sub     => '__SUB__',
33     refaliasing     => 'refaliasing',
34     lexical_subs    => 'lexsubs',
35     postderef_qq    => 'postderef_qq',
36     unicode_eval    => 'unieval',
37     unicode_strings => 'unicode',
38     fc              => 'fc',
39     signatures      => 'signatures',
40 );
41
42 # NOTE: If a feature is ever enabled in a non-contiguous range of Perl
43 #       versions, any code below that uses %BundleRanges will have to
44 #       be changed to account.
45
46 # 5.odd implies the next 5.even, but an explicit 5.even can override it.
47 my %feature_bundle = (
48      all     => [ keys %feature ],
49      default => [qw(array_base)],
50     "5.9.5"  => [qw(say state switch array_base)],
51     "5.10"   => [qw(say state switch array_base)],
52     "5.11"   => [qw(say state switch unicode_strings array_base)],
53     "5.13"   => [qw(say state switch unicode_strings array_base)],
54     "5.15"   => [qw(say state switch unicode_strings unicode_eval
55                     evalbytes current_sub fc)],
56     "5.17"   => [qw(say state switch unicode_strings unicode_eval
57                     evalbytes current_sub fc)],
58     "5.19"   => [qw(say state switch unicode_strings unicode_eval
59                     evalbytes current_sub fc)],
60     "5.21"   => [qw(say state switch unicode_strings unicode_eval
61                     evalbytes current_sub fc)],
62     "5.23"   => [qw(say state switch unicode_strings unicode_eval
63                     evalbytes current_sub fc postderef_qq)],
64 );
65
66 # not actually used currently
67 my @experimental = qw( lexical_subs );
68
69
70 ###########################################################################
71 # More data generated from the above
72
73 for (keys %feature_bundle) {
74     next unless /^5\.(\d*[13579])\z/;
75     $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
76 }
77
78 my %UniqueBundles; # "say state switch" => 5.10
79 my %Aliases;       #  5.12 => 5.11
80 for( sort keys %feature_bundle ) {
81     my $value = join(' ', sort @{$feature_bundle{$_}});
82     if (exists $UniqueBundles{$value}) {
83         $Aliases{$_} = $UniqueBundles{$value};
84     }
85     else {
86         $UniqueBundles{$value} = $_;
87     }
88 }
89                            # start   end
90 my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
91 for my $bund (
92     sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
93          values %UniqueBundles
94 ) {
95     next if $bund =~ /[^\d.]/ and $bund ne 'default';
96     for (@{$feature_bundle{$bund}}) {
97         if (@{$BundleRanges{$_} ||= []} == 2) {
98             $BundleRanges{$_}[1] = $bund
99         }
100         else {
101             push @{$BundleRanges{$_}}, $bund;
102         }
103     }
104 }
105
106 my $HintShift;
107 my $HintMask;
108 my $Uni8Bit;
109
110 open "perl.h", "perl.h" or die "$0 cannot open perl.h: $!";
111 while (readline "perl.h") {
112     next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
113     my $is_u8b = $1 =~ 8;
114     /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
115     if ($is_u8b) {
116         $Uni8Bit = $1;
117     }
118     else {
119         my $hex = $HintMask = $1;
120         my $bits = sprintf "%b", oct $1;
121         $bits =~ /^0*1+(0*)\z/
122          or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
123         $HintShift = length $1;
124         my $bits_needed =
125             length sprintf "%b", scalar keys %UniqueBundles;
126         $bits =~ /1{$bits_needed}/
127             or die "Not enough bits (need $bits_needed)"
128                  . " in $bits (binary for $hex):\n\n$_\n ";
129     }
130     if ($Uni8Bit && $HintMask) { last }
131 }
132 die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
133 die "No HINT_UNI_8_BIT defined in perl.h"    unless $Uni8Bit;
134
135 close "perl.h";
136
137 my @HintedBundles =
138     ('default', grep !/[^\d.]/, sort values %UniqueBundles);
139
140
141 ###########################################################################
142 # Open files to be generated
143
144 my ($pm, $h) = map {
145     open_new($_, '>', { by => 'regen/feature.pl' });
146 } 'lib/feature.pm', 'feature.h';
147
148
149 ###########################################################################
150 # Generate lib/feature.pm
151
152 while (<DATA>) {
153     last if /^FEATURES$/ ;
154     print $pm $_ ;
155 }
156
157 sub longest {
158     my $long;
159     for(@_) {
160         if (!defined $long or length $long < length) {
161             $long = $_;
162         }
163     }
164     $long;
165 }
166
167 print $pm "our %feature = (\n";
168 my $width = length longest keys %feature;
169 for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
170     print $pm "    $_" . " "x($width-length)
171             . " => 'feature_$feature{$_}',\n";
172 }
173 print $pm ");\n\n";
174
175 print $pm "our %feature_bundle = (\n";
176 $width = length longest values %UniqueBundles;
177 for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
178           keys %UniqueBundles ) {
179     my $bund = $UniqueBundles{$_};
180     print $pm qq'    "$bund"' . " "x($width-length $bund)
181             . qq' => [qw($_)],\n';
182 }
183 print $pm ");\n\n";
184
185 for (sort keys %Aliases) {
186     print $pm
187         qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
188 };
189
190 #print $pm "my \%experimental = (\n";
191 #print $pm "    $_ => 1,\n", for @experimental;
192 #print $pm ");\n";
193
194 print $pm <<EOPM;
195
196 our \$hint_shift   = $HintShift;
197 our \$hint_mask    = $HintMask;
198 our \@hint_bundles = qw( @HintedBundles );
199
200 # This gets set (for now) in \$^H as well as in %^H,
201 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
202 # See HINT_UNI_8_BIT in perl.h.
203 our \$hint_uni8bit = $Uni8Bit;
204 EOPM
205
206
207 while (<DATA>) {
208     last if /^PODTURES$/ ;
209     print $pm $_ ;
210 }
211
212 select +(select($pm), $~ = 'PODTURES')[0];
213 format PODTURES =
214   ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
215 $::bundle, $::feature
216 .
217
218 for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
219     $::bundle = ":$_";
220     $::feature = join ' ', @{$feature_bundle{$_}};
221     write $pm;
222     print $pm "\n";
223 }
224
225 while (<DATA>) {
226     print $pm $_ ;
227 }
228
229 read_only_bottom_close_and_rename($pm);
230
231
232 ###########################################################################
233 # Generate feature.h
234
235 print $h <<EOH;
236
237 #if defined(PERL_CORE) || defined (PERL_EXT)
238
239 #define HINT_FEATURE_SHIFT      $HintShift
240
241 EOH
242
243 my $count;
244 for (@HintedBundles) {
245     (my $key = uc) =~ y/.//d;
246     print $h "#define FEATURE_BUNDLE_$key       ", $count++, "\n";
247 }
248
249 print $h <<'EOH';
250 #define FEATURE_BUNDLE_CUSTOM   (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
251
252 #define CURRENT_HINTS \
253     (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
254 #define CURRENT_FEATURE_BUNDLE \
255     ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
256
257 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
258    the HP-UX cc on PA-RISC */
259 #define FEATURE_IS_ENABLED(name)                                        \
260         ((CURRENT_HINTS                                                  \
261            & HINT_LOCALIZE_HH)                                            \
262             ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
263 /* The longest string we pass in.  */
264 EOH
265
266 my $longest_internal_feature_name = longest values %feature;
267 print $h <<EOL;
268 #define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
269
270 EOL
271
272 for (
273     sort { length $a <=> length $b || $a cmp $b } keys %feature
274 ) {
275     my($first,$last) =
276         map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
277     my $name = $feature{$_};
278     my $NAME = uc $name;
279     if ($last && $first eq 'DEFAULT') { #  '>= DEFAULT' warns
280         print $h <<EOI;
281 #define FEATURE_$NAME\_IS_ENABLED \\
282     ( \\
283         CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
284      || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
285          FEATURE_IS_ENABLED("$name")) \\
286     )
287
288 EOI
289     }
290     elsif ($last) {
291         print $h <<EOH3;
292 #define FEATURE_$NAME\_IS_ENABLED \\
293     ( \\
294         (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
295          CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
296      || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
297          FEATURE_IS_ENABLED("$name")) \\
298     )
299
300 EOH3
301     }
302     elsif ($first) {
303         print $h <<EOH4;
304 #define FEATURE_$NAME\_IS_ENABLED \\
305     ( \\
306         CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
307      || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
308          FEATURE_IS_ENABLED("$name")) \\
309     )
310
311 EOH4
312     }
313     else {
314         print $h <<EOH5;
315 #define FEATURE_$NAME\_IS_ENABLED \\
316     ( \\
317         CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
318          FEATURE_IS_ENABLED("$name") \\
319     )
320
321 EOH5
322     }
323 }
324
325 print $h <<EOH;
326
327 #endif /* PERL_CORE or PERL_EXT */
328
329 #ifdef PERL_IN_OP_C
330 PERL_STATIC_INLINE void
331 S_enable_feature_bundle(pTHX_ SV *ver)
332 {
333     SV *comp_ver = sv_newmortal();
334     PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
335              | (
336 EOH
337
338 for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
339     my $numver = $_;
340     if ($numver eq '5.10') { $numver = '5.009005' } # special case
341     else                   { $numver =~ s/\./.0/  } # 5.11 => 5.011
342     (my $macrover = $_) =~ y/.//d;
343     print $h <<"    EOK";
344                   (sv_setnv(comp_ver, $numver),
345                    vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
346                         ? FEATURE_BUNDLE_$macrover :
347     EOK
348 }
349
350 print $h <<EOJ;
351                           FEATURE_BUNDLE_DEFAULT
352                ) << HINT_FEATURE_SHIFT;
353     /* special case */
354     assert(PL_curcop == &PL_compiling);
355     if (FEATURE_UNICODE_IS_ENABLED) PL_hints |=  HINT_UNI_8_BIT;
356     else                            PL_hints &= ~HINT_UNI_8_BIT;
357 }
358 #endif /* PERL_IN_OP_C */
359 EOJ
360
361 read_only_bottom_close_and_rename($h);
362
363
364 ###########################################################################
365 # Template for feature.pm
366
367 __END__
368 package feature;
369
370 our $VERSION = '1.42';
371
372 FEATURES
373
374 # TODO:
375 # - think about versioned features (use feature switch => 2)
376
377 =head1 NAME
378
379 feature - Perl pragma to enable new features
380
381 =head1 SYNOPSIS
382
383     use feature qw(say switch);
384     given ($foo) {
385         when (1)          { say "\$foo == 1" }
386         when ([2,3])      { say "\$foo == 2 || \$foo == 3" }
387         when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
388         when ($_ > 100)   { say "\$foo > 100" }
389         default           { say "None of the above" }
390     }
391
392     use feature ':5.10'; # loads all features available in perl 5.10
393
394     use v5.10;           # implicitly loads :5.10 feature bundle
395
396 =head1 DESCRIPTION
397
398 It is usually impossible to add new syntax to Perl without breaking
399 some existing programs.  This pragma provides a way to minimize that
400 risk. New syntactic constructs, or new semantic meanings to older
401 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
402 only when the appropriate feature pragma is in scope.  (Nevertheless, the
403 C<CORE::> prefix provides access to all Perl keywords, regardless of this
404 pragma.)
405
406 =head2 Lexical effect
407
408 Like other pragmas (C<use strict>, for example), features have a lexical
409 effect.  C<use feature qw(foo)> will only make the feature "foo" available
410 from that point to the end of the enclosing block.
411
412     {
413         use feature 'say';
414         say "say is available here";
415     }
416     print "But not here.\n";
417
418 =head2 C<no feature>
419
420 Features can also be turned off by using C<no feature "foo">.  This too
421 has lexical effect.
422
423     use feature 'say';
424     say "say is available here";
425     {
426         no feature 'say';
427         print "But not here.\n";
428     }
429     say "Yet it is here.";
430
431 C<no feature> with no features specified will reset to the default group.  To
432 disable I<all> features (an unusual request!) use C<no feature ':all'>.
433
434 =head1 AVAILABLE FEATURES
435
436 =head2 The 'say' feature
437
438 C<use feature 'say'> tells the compiler to enable the Perl 6 style
439 C<say> function.
440
441 See L<perlfunc/say> for details.
442
443 This feature is available starting with Perl 5.10.
444
445 =head2 The 'state' feature
446
447 C<use feature 'state'> tells the compiler to enable C<state>
448 variables.
449
450 See L<perlsub/"Persistent Private Variables"> for details.
451
452 This feature is available starting with Perl 5.10.
453
454 =head2 The 'switch' feature
455
456 B<WARNING>: Because the L<smartmatch operator|perlop/"Smartmatch Operator"> is
457 experimental, Perl will warn when you use this feature, unless you have
458 explicitly disabled the warning:
459
460     no warnings "experimental::smartmatch";
461
462 C<use feature 'switch'> tells the compiler to enable the Perl 6
463 given/when construct.
464
465 See L<perlsyn/"Switch Statements"> for details.
466
467 This feature is available starting with Perl 5.10.
468
469 =head2 The 'unicode_strings' feature
470
471 C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
472 in all string operations executed within its scope (unless they are also
473 within the scope of either C<use locale> or C<use bytes>).  The same applies
474 to all regular expressions compiled within the scope, even if executed outside
475 it.  It does not change the internal representation of strings, but only how
476 they are interpreted.
477
478 C<no feature 'unicode_strings'> tells the compiler to use the traditional
479 Perl rules wherein the native character set rules is used unless it is
480 clear to Perl that Unicode is desired.  This can lead to some surprises
481 when the behavior suddenly changes.  (See
482 L<perlunicode/The "Unicode Bug"> for details.)  For this reason, if you are
483 potentially using Unicode in your program, the
484 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
485
486 This feature is available starting with Perl 5.12; was almost fully
487 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
488
489 =head2 The 'unicode_eval' and 'evalbytes' features
490
491 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
492 string, will evaluate it as a string of characters, ignoring any
493 C<use utf8> declarations.  C<use utf8> exists to declare the encoding of
494 the script, which only makes sense for a stream of bytes, not a string of
495 characters.  Source filters are forbidden, as they also really only make
496 sense on strings of bytes.  Any attempt to activate a source filter will
497 result in an error.
498
499 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
500 the argument passed to it as a string of bytes.  It dies if the string
501 contains any characters outside the 8-bit range.  Source filters work
502 within C<evalbytes>: they apply to the contents of the string being
503 evaluated.
504
505 Together, these two features are intended to replace the historical C<eval>
506 function, which has (at least) two bugs in it, that cannot easily be fixed
507 without breaking existing programs:
508
509 =over
510
511 =item *
512
513 C<eval> behaves differently depending on the internal encoding of the
514 string, sometimes treating its argument as a string of bytes, and sometimes
515 as a string of characters.
516
517 =item *
518
519 Source filters activated within C<eval> leak out into whichever I<file>
520 scope is currently being compiled.  To give an example with the CPAN module
521 L<Semi::Semicolons>:
522
523     BEGIN { eval "use Semi::Semicolons;  # not filtered here " }
524     # filtered here!
525
526 C<evalbytes> fixes that to work the way one would expect:
527
528     use feature "evalbytes";
529     BEGIN { evalbytes "use Semi::Semicolons;  # filtered " }
530     # not filtered
531
532 =back
533
534 These two features are available starting with Perl 5.16.
535
536 =head2 The 'current_sub' feature
537
538 This provides the C<__SUB__> token that returns a reference to the current
539 subroutine or C<undef> outside of a subroutine.
540
541 This feature is available starting with Perl 5.16.
542
543 =head2 The 'array_base' feature
544
545 This feature supports the legacy C<$[> variable.  See L<perlvar/$[> and
546 L<arybase>.  It is on by default but disabled under C<use v5.16> (see
547 L</IMPLICIT LOADING>, below).
548
549 This feature is available under this name starting with Perl 5.16.  In
550 previous versions, it was simply on all the time, and this pragma knew
551 nothing about it.
552
553 =head2 The 'fc' feature
554
555 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
556 which implements Unicode casefolding.
557
558 See L<perlfunc/fc> for details.
559
560 This feature is available from Perl 5.16 onwards.
561
562 =head2 The 'lexical_subs' feature
563
564 B<WARNING>: This feature is still experimental and the implementation may
565 change in future versions of Perl.  For this reason, Perl will
566 warn when you use the feature, unless you have explicitly disabled the
567 warning:
568
569     no warnings "experimental::lexical_subs";
570
571 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
572 and C<our sub foo> syntax.  See L<perlsub/Lexical Subroutines> for details.
573
574 This feature is available from Perl 5.18 onwards.
575
576 =head2 The 'postderef' and 'postderef_qq' features
577
578 The 'postderef_qq' feature extends the applicability of L<postfix
579 dereference syntax|perlref/Postfix Dereference Syntax> so that postfix array
580 and scalar dereference are available in double-quotish interpolations. For
581 example, it makes the following two statements equivalent:
582
583   my $s = "[@{ $h->{a} }]";
584   my $s = "[$h->{a}->@*]";
585
586 This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it
587 was classed as experimental, and Perl emitted a warning for its
588 usage, except when explicitly disabled:
589
590   no warnings "experimental::postderef";
591
592 As of Perl 5.24, use of this feature no longer triggers a warning, though
593 the C<experimental::postderef> warning category still exists (for
594 compatibility with code that disables it).
595
596 The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable
597 postfix dereference syntax outside double-quotish interpolations. In those
598 versions, using it triggered the C<experimental::postderef> warning in the
599 same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is
600 not only no longer experimental, but it is enabled for all Perl code,
601 regardless of what feature declarations are in scope.
602
603 =head2 The 'signatures' feature
604
605 B<WARNING>: This feature is still experimental and the implementation may
606 change in future versions of Perl.  For this reason, Perl will
607 warn when you use the feature, unless you have explicitly disabled the
608 warning:
609
610     no warnings "experimental::signatures";
611
612 This enables unpacking of subroutine arguments into lexical variables
613 by syntax such as
614
615     sub foo ($left, $right) {
616         return $left + $right;
617     }
618
619 See L<perlsub/Signatures> for details.
620
621 This feature is available from Perl 5.20 onwards.
622
623 =head2 The 'refaliasing' feature
624
625 B<WARNING>: This feature is still experimental and the implementation may
626 change in future versions of Perl.  For this reason, Perl will
627 warn when you use the feature, unless you have explicitly disabled the
628 warning:
629
630     no warnings "experimental::refaliasing";
631
632 This enables aliasing via assignment to references:
633
634     \$a = \$b; # $a and $b now point to the same scalar
635     \@a = \@b; #                     to the same array
636     \%a = \%b;
637     \&a = \&b;
638     foreach \%hash (@array_of_hash_refs) {
639         ...
640     }
641
642 See L<perlref/Assigning to References> for details.
643
644 This feature is available from Perl 5.22 onwards.
645
646 =head2 The 'bitwise' feature
647
648 B<WARNING>: This feature is still experimental and the implementation may
649 change in future versions of Perl.  For this reason, Perl will
650 warn when you use the feature, unless you have explicitly disabled the
651 warning:
652
653     no warnings "experimental::bitwise";
654
655 This makes the four standard bitwise operators (C<& | ^ ~>) treat their
656 operands consistently as numbers, and introduces four new dotted operators
657 (C<&. |. ^. ~.>) that treat their operands consistently as strings.  The
658 same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
659
660 See L<perlop/Bitwise String Operators> for details.
661
662 This feature is available from Perl 5.22 onwards.
663
664 =head1 FEATURE BUNDLES
665
666 It's possible to load multiple features together, using
667 a I<feature bundle>.  The name of a feature bundle is prefixed with
668 a colon, to distinguish it from an actual feature.
669
670   use feature ":5.10";
671
672 The following feature bundles are available:
673
674   bundle    features included
675   --------- -----------------
676 PODTURES
677 The C<:default> bundle represents the feature set that is enabled before
678 any C<use feature> or C<no feature> declaration.
679
680 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
681 no effect.  Feature bundles are guaranteed to be the same for all sub-versions.
682
683   use feature ":5.14.0";    # same as ":5.14"
684   use feature ":5.14.1";    # same as ":5.14"
685
686 =head1 IMPLICIT LOADING
687
688 Instead of loading feature bundles by name, it is easier to let Perl do
689 implicit loading of a feature bundle for you.
690
691 There are two ways to load the C<feature> pragma implicitly:
692
693 =over 4
694
695 =item *
696
697 By using the C<-E> switch on the Perl command-line instead of C<-e>.
698 That will enable the feature bundle for that version of Perl in the
699 main compilation unit (that is, the one-liner that follows C<-E>).
700
701 =item *
702
703 By explicitly requiring a minimum Perl version number for your program, with
704 the C<use VERSION> construct.  That is,
705
706     use v5.10.0;
707
708 will do an implicit
709
710     no feature ':all';
711     use feature ':5.10';
712
713 and so on.  Note how the trailing sub-version
714 is automatically stripped from the
715 version.
716
717 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
718
719     use 5.010;
720
721 with the same effect.
722
723 If the required version is older than Perl 5.10, the ":default" feature
724 bundle is automatically loaded instead.
725
726 =back
727
728 =cut
729
730 sub import {
731     shift;
732
733     if (!@_) {
734         croak("No features specified");
735     }
736
737     __common(1, @_);
738 }
739
740 sub unimport {
741     shift;
742
743     # A bare C<no feature> should reset to the default bundle
744     if (!@_) {
745         $^H &= ~($hint_uni8bit|$hint_mask);
746         return;
747     }
748
749     __common(0, @_);
750 }
751
752
753 sub __common {
754     my $import = shift;
755     my $bundle_number = $^H & $hint_mask;
756     my $features = $bundle_number != $hint_mask
757         && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
758     if ($features) {
759         # Features are enabled implicitly via bundle hints.
760         # Delete any keys that may be left over from last time.
761         delete @^H{ values(%feature) };
762         $^H |= $hint_mask;
763         for (@$features) {
764             $^H{$feature{$_}} = 1;
765             $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
766         }
767     }
768     while (@_) {
769         my $name = shift;
770         if (substr($name, 0, 1) eq ":") {
771             my $v = substr($name, 1);
772             if (!exists $feature_bundle{$v}) {
773                 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
774                 if (!exists $feature_bundle{$v}) {
775                     unknown_feature_bundle(substr($name, 1));
776                 }
777             }
778             unshift @_, @{$feature_bundle{$v}};
779             next;
780         }
781         if (!exists $feature{$name}) {
782             unknown_feature($name);
783         }
784         if ($import) {
785             $^H{$feature{$name}} = 1;
786             $^H |= $hint_uni8bit if $name eq 'unicode_strings';
787         } else {
788             delete $^H{$feature{$name}};
789             $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
790         }
791     }
792 }
793
794 sub unknown_feature {
795     my $feature = shift;
796     croak(sprintf('Feature "%s" is not supported by Perl %vd',
797             $feature, $^V));
798 }
799
800 sub unknown_feature_bundle {
801     my $feature = shift;
802     croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
803             $feature, $^V));
804 }
805
806 sub croak {
807     require Carp;
808     Carp::croak(@_);
809 }
810
811 1;