This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regen/mk_invlists.pl: Add dependency
[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
RS
62 "5.23" => [qw(say state switch unicode_strings unicode_eval
63 evalbytes current_sub fc)],
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;
beda0318
FC
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 && \\
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
6031f0d2 370our $VERSION = '1.41';
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
578B<WARNING>: This feature is still experimental and the implementation may
579change in future versions of Perl. For this reason, Perl will
580warn when you use the feature, unless you have explicitly disabled the
581warning:
582
583 no warnings "experimental::postderef";
584
585The 'postderef' feature allows the use of L<postfix dereference
586syntax|perlref/Postfix Dereference Syntax>. For example, it will make the
587following two statements equivalent:
588
589 my @x = @{ $h->{a} };
590 my @x = $h->{a}->@*;
591
592The 'postderef_qq' feature extends this, for array and scalar dereference, to
593working inside of double-quotish interpolations.
594
595This feature is available from Perl 5.20 onwards.
596
30d9c59b
Z
597=head2 The 'signatures' feature
598
599B<WARNING>: This feature is still experimental and the implementation may
600change in future versions of Perl. For this reason, Perl will
601warn when you use the feature, unless you have explicitly disabled the
602warning:
603
604 no warnings "experimental::signatures";
605
606This enables unpacking of subroutine arguments into lexical variables
607by syntax such as
608
609 sub foo ($left, $right) {
610 return $left + $right;
611 }
612
613See L<perlsub/Signatures> for details.
614
615This feature is available from Perl 5.20 onwards.
616
baabe3fb 617=head2 The 'refaliasing' feature
82848c10
FC
618
619B<WARNING>: This feature is still experimental and the implementation may
620change in future versions of Perl. For this reason, Perl will
621warn when you use the feature, unless you have explicitly disabled the
622warning:
623
baabe3fb 624 no warnings "experimental::refaliasing";
82848c10
FC
625
626This enables aliasing via assignment to references:
627
628 \$a = \$b; # $a and $b now point to the same scalar
629 \@a = \@b; # to the same array
630 \%a = \%b;
631 \&a = \&b;
632 foreach \%hash (@array_of_hash_refs) {
633 ...
634 }
635
636See L<perlref/Assigning to References> for details.
637
638This feature is available from Perl 5.22 onwards.
639
70ea8edf
FC
640=head2 The 'bitwise' feature
641
642B<WARNING>: This feature is still experimental and the implementation may
643change in future versions of Perl. For this reason, Perl will
644warn when you use the feature, unless you have explicitly disabled the
645warning:
646
647 no warnings "experimental::bitwise";
648
649This makes the four standard bitwise operators (C<& | ^ ~>) treat their
650operands consistently as numbers, and introduces four new dotted operators
651(C<&. |. ^. ~.>) that treat their operands consistently as strings. The
652same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
653
654See L<perlop/Bitwise String Operators> for details.
655
656This feature is available from Perl 5.22 onwards.
657
69bcf1d3
FC
658=head1 FEATURE BUNDLES
659
660It's possible to load multiple features together, using
661a I<feature bundle>. The name of a feature bundle is prefixed with
662a colon, to distinguish it from an actual feature.
663
664 use feature ":5.10";
665
666The following feature bundles are available:
667
668 bundle features included
669 --------- -----------------
2b3fe414 670PODTURES
69bcf1d3
FC
671The C<:default> bundle represents the feature set that is enabled before
672any C<use feature> or C<no feature> declaration.
673
674Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
675no effect. Feature bundles are guaranteed to be the same for all sub-versions.
676
677 use feature ":5.14.0"; # same as ":5.14"
678 use feature ":5.14.1"; # same as ":5.14"
679
680=head1 IMPLICIT LOADING
681
682Instead of loading feature bundles by name, it is easier to let Perl do
683implicit loading of a feature bundle for you.
684
685There are two ways to load the C<feature> pragma implicitly:
686
687=over 4
688
689=item *
690
691By using the C<-E> switch on the Perl command-line instead of C<-e>.
692That will enable the feature bundle for that version of Perl in the
693main compilation unit (that is, the one-liner that follows C<-E>).
694
695=item *
696
697By explicitly requiring a minimum Perl version number for your program, with
698the C<use VERSION> construct. That is,
699
700 use v5.10.0;
701
702will do an implicit
703
39ec54a5 704 no feature ':all';
69bcf1d3
FC
705 use feature ':5.10';
706
707and so on. Note how the trailing sub-version
708is automatically stripped from the
709version.
710
711But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
712
713 use 5.010;
714
715with the same effect.
716
717If the required version is older than Perl 5.10, the ":default" feature
718bundle is automatically loaded instead.
719
720=back
721
722=cut
723
724sub import {
22055af9 725 shift;
36143a0c
NC
726
727 if (!@_) {
69bcf1d3
FC
728 croak("No features specified");
729 }
36143a0c 730
d3757264 731 __common(1, @_);
69bcf1d3
FC
732}
733
734sub unimport {
22055af9 735 shift;
69bcf1d3 736
39ec54a5 737 # A bare C<no feature> should reset to the default bundle
69bcf1d3 738 if (!@_) {
39ec54a5
RS
739 $^H &= ~($hint_uni8bit|$hint_mask);
740 return;
69bcf1d3
FC
741 }
742
d3757264
NC
743 __common(0, @_);
744}
745
746
747sub __common {
748 my $import = shift;
0c8d5017
NC
749 my $bundle_number = $^H & $hint_mask;
750 my $features = $bundle_number != $hint_mask
751 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
752 if ($features) {
da5b5421 753 # Features are enabled implicitly via bundle hints.
d9ee6ccb
NC
754 # Delete any keys that may be left over from last time.
755 delete @^H{ values(%feature) };
756 $^H |= $hint_mask;
757 for (@$features) {
758 $^H{$feature{$_}} = 1;
759 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
760 }
da5b5421 761 }
69bcf1d3
FC
762 while (@_) {
763 my $name = shift;
764 if (substr($name, 0, 1) eq ":") {
765 my $v = substr($name, 1);
766 if (!exists $feature_bundle{$v}) {
767 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
768 if (!exists $feature_bundle{$v}) {
769 unknown_feature_bundle(substr($name, 1));
770 }
771 }
772 unshift @_, @{$feature_bundle{$v}};
773 next;
774 }
36143a0c 775 if (!exists $feature{$name}) {
69bcf1d3 776 unknown_feature($name);
69bcf1d3 777 }
d3757264
NC
778 if ($import) {
779 $^H{$feature{$name}} = 1;
780 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
781 } else {
69bcf1d3
FC
782 delete $^H{$feature{$name}};
783 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
784 }
785 }
786}
787
788sub unknown_feature {
789 my $feature = shift;
790 croak(sprintf('Feature "%s" is not supported by Perl %vd',
791 $feature, $^V));
792}
793
794sub unknown_feature_bundle {
795 my $feature = shift;
796 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
797 $feature, $^V));
798}
799
800sub croak {
801 require Carp;
802 Carp::croak(@_);
803}
804
8051;