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