1 # -*- buffer-read-only: t -*-
2 # !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3 # This file is built by regen/feature.pl.
4 # Any changes made here will be lost!
13 state => 'feature_state',
14 switch => 'feature_switch',
15 bitwise => 'feature_bitwise',
16 evalbytes => 'feature_evalbytes',
17 postderef => 'feature_postderef',
18 array_base => 'feature_arybase',
19 signatures => 'feature_signatures',
20 current_sub => 'feature___SUB__',
21 refaliasing => 'feature_refaliasing',
22 lexical_subs => 'feature_lexsubs',
23 postderef_qq => 'feature_postderef_qq',
24 unicode_eval => 'feature_unieval',
25 unicode_strings => 'feature_unicode',
28 our %feature_bundle = (
29 "5.10" => [qw(array_base say state switch)],
30 "5.11" => [qw(array_base say state switch unicode_strings)],
31 "5.15" => [qw(current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
32 "all" => [qw(array_base bitwise current_sub evalbytes fc lexical_subs postderef postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
33 "default" => [qw(array_base)],
36 $feature_bundle{"5.12"} = $feature_bundle{"5.11"};
37 $feature_bundle{"5.13"} = $feature_bundle{"5.11"};
38 $feature_bundle{"5.14"} = $feature_bundle{"5.11"};
39 $feature_bundle{"5.16"} = $feature_bundle{"5.15"};
40 $feature_bundle{"5.17"} = $feature_bundle{"5.15"};
41 $feature_bundle{"5.18"} = $feature_bundle{"5.15"};
42 $feature_bundle{"5.19"} = $feature_bundle{"5.15"};
43 $feature_bundle{"5.20"} = $feature_bundle{"5.15"};
44 $feature_bundle{"5.21"} = $feature_bundle{"5.15"};
45 $feature_bundle{"5.22"} = $feature_bundle{"5.15"};
46 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
49 our $hint_mask = 0x1c000000;
50 our @hint_bundles = qw( default 5.10 5.11 5.15 );
52 # This gets set (for now) in $^H as well as in %^H,
53 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
54 # See HINT_UNI_8_BIT in perl.h.
55 our $hint_uni8bit = 0x00000800;
58 # - think about versioned features (use feature switch => 2)
62 feature - Perl pragma to enable new features
66 use feature qw(say switch);
68 when (1) { say "\$foo == 1" }
69 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
70 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
71 when ($_ > 100) { say "\$foo > 100" }
72 default { say "None of the above" }
75 use feature ':5.10'; # loads all features available in perl 5.10
77 use v5.10; # implicitly loads :5.10 feature bundle
81 It is usually impossible to add new syntax to Perl without breaking
82 some existing programs. This pragma provides a way to minimize that
83 risk. New syntactic constructs, or new semantic meanings to older
84 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
85 only when the appropriate feature pragma is in scope. (Nevertheless, the
86 C<CORE::> prefix provides access to all Perl keywords, regardless of this
91 Like other pragmas (C<use strict>, for example), features have a lexical
92 effect. C<use feature qw(foo)> will only make the feature "foo" available
93 from that point to the end of the enclosing block.
97 say "say is available here";
99 print "But not here.\n";
103 Features can also be turned off by using C<no feature "foo">. This too
107 say "say is available here";
110 print "But not here.\n";
112 say "Yet it is here.";
114 C<no feature> with no features specified will reset to the default group. To
115 disable I<all> features (an unusual request!) use C<no feature ':all'>.
117 =head1 AVAILABLE FEATURES
119 =head2 The 'say' feature
121 C<use feature 'say'> tells the compiler to enable the Perl 6 style
124 See L<perlfunc/say> for details.
126 This feature is available starting with Perl 5.10.
128 =head2 The 'state' feature
130 C<use feature 'state'> tells the compiler to enable C<state>
133 See L<perlsub/"Persistent Private Variables"> for details.
135 This feature is available starting with Perl 5.10.
137 =head2 The 'switch' feature
139 B<WARNING>: Because the L<smartmatch operator|perlop/"Smartmatch Operator"> is
140 experimental, Perl will warn when you use this feature, unless you have
141 explicitly disabled the warning:
143 no warnings "experimental::smartmatch";
145 C<use feature 'switch'> tells the compiler to enable the Perl 6
146 given/when construct.
148 See L<perlsyn/"Switch Statements"> for details.
150 This feature is available starting with Perl 5.10.
152 =head2 The 'unicode_strings' feature
154 C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
155 in all string operations executed within its scope (unless they are also
156 within the scope of either C<use locale> or C<use bytes>). The same applies
157 to all regular expressions compiled within the scope, even if executed outside
158 it. It does not change the internal representation of strings, but only how
159 they are interpreted.
161 C<no feature 'unicode_strings'> tells the compiler to use the traditional
162 Perl rules wherein the native character set rules is used unless it is
163 clear to Perl that Unicode is desired. This can lead to some surprises
164 when the behavior suddenly changes. (See
165 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
166 potentially using Unicode in your program, the
167 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
169 This feature is available starting with Perl 5.12; was almost fully
170 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
172 =head2 The 'unicode_eval' and 'evalbytes' features
174 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
175 string, will evaluate it as a string of characters, ignoring any
176 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
177 the script, which only makes sense for a stream of bytes, not a string of
178 characters. Source filters are forbidden, as they also really only make
179 sense on strings of bytes. Any attempt to activate a source filter will
182 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
183 the argument passed to it as a string of bytes. It dies if the string
184 contains any characters outside the 8-bit range. Source filters work
185 within C<evalbytes>: they apply to the contents of the string being
188 Together, these two features are intended to replace the historical C<eval>
189 function, which has (at least) two bugs in it, that cannot easily be fixed
190 without breaking existing programs:
196 C<eval> behaves differently depending on the internal encoding of the
197 string, sometimes treating its argument as a string of bytes, and sometimes
198 as a string of characters.
202 Source filters activated within C<eval> leak out into whichever I<file>
203 scope is currently being compiled. To give an example with the CPAN module
206 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
209 C<evalbytes> fixes that to work the way one would expect:
211 use feature "evalbytes";
212 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
217 These two features are available starting with Perl 5.16.
219 =head2 The 'current_sub' feature
221 This provides the C<__SUB__> token that returns a reference to the current
222 subroutine or C<undef> outside of a subroutine.
224 This feature is available starting with Perl 5.16.
226 =head2 The 'array_base' feature
228 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
229 L<arybase>. It is on by default but disabled under C<use v5.16> (see
230 L</IMPLICIT LOADING>, below).
232 This feature is available under this name starting with Perl 5.16. In
233 previous versions, it was simply on all the time, and this pragma knew
236 =head2 The 'fc' feature
238 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
239 which implements Unicode casefolding.
241 See L<perlfunc/fc> for details.
243 This feature is available from Perl 5.16 onwards.
245 =head2 The 'lexical_subs' feature
247 B<WARNING>: This feature is still experimental and the implementation may
248 change in future versions of Perl. For this reason, Perl will
249 warn when you use the feature, unless you have explicitly disabled the
252 no warnings "experimental::lexical_subs";
254 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
255 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
257 This feature is available from Perl 5.18 onwards.
259 =head2 The 'postderef' and 'postderef_qq' features
261 B<WARNING>: This feature is still experimental and the implementation may
262 change in future versions of Perl. For this reason, Perl will
263 warn when you use the feature, unless you have explicitly disabled the
266 no warnings "experimental::postderef";
268 The 'postderef' feature allows the use of L<postfix dereference
269 syntax|perlref/Postfix Dereference Syntax>. For example, it will make the
270 following two statements equivalent:
272 my @x = @{ $h->{a} };
275 The 'postderef_qq' feature extends this, for array and scalar dereference, to
276 working inside of double-quotish interpolations.
278 This feature is available from Perl 5.20 onwards.
280 =head2 The 'signatures' feature
282 B<WARNING>: This feature is still experimental and the implementation may
283 change in future versions of Perl. For this reason, Perl will
284 warn when you use the feature, unless you have explicitly disabled the
287 no warnings "experimental::signatures";
289 This enables unpacking of subroutine arguments into lexical variables
292 sub foo ($left, $right) {
293 return $left + $right;
296 See L<perlsub/Signatures> for details.
298 This feature is available from Perl 5.20 onwards.
300 =head2 The 'refaliasing' feature
302 B<WARNING>: This feature is still experimental and the implementation may
303 change in future versions of Perl. For this reason, Perl will
304 warn when you use the feature, unless you have explicitly disabled the
307 no warnings "experimental::refaliasing";
309 This enables aliasing via assignment to references:
311 \$a = \$b; # $a and $b now point to the same scalar
312 \@a = \@b; # to the same array
315 foreach \%hash (@array_of_hash_refs) {
319 See L<perlref/Assigning to References> for details.
321 This feature is available from Perl 5.22 onwards.
323 =head2 The 'bitwise' feature
325 B<WARNING>: This feature is still experimental and the implementation may
326 change in future versions of Perl. For this reason, Perl will
327 warn when you use the feature, unless you have explicitly disabled the
330 no warnings "experimental::bitwise";
332 This makes the four standard bitwise operators (C<& | ^ ~>) treat their
333 operands consistently as numbers, and introduces four new dotted operators
334 (C<&. |. ^. ~.>) that treat their operands consistently as strings. The
335 same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
337 See L<perlop/Bitwise String Operators> for details.
339 This feature is available from Perl 5.22 onwards.
341 =head1 FEATURE BUNDLES
343 It's possible to load multiple features together, using
344 a I<feature bundle>. The name of a feature bundle is prefixed with
345 a colon, to distinguish it from an actual feature.
349 The following feature bundles are available:
351 bundle features included
352 --------- -----------------
355 :5.10 say state switch array_base
357 :5.12 say state switch unicode_strings array_base
359 :5.14 say state switch unicode_strings array_base
361 :5.16 say state switch unicode_strings
362 unicode_eval evalbytes current_sub fc
364 :5.18 say state switch unicode_strings
365 unicode_eval evalbytes current_sub fc
367 :5.20 say state switch unicode_strings
368 unicode_eval evalbytes current_sub fc
370 :5.22 say state switch unicode_strings
371 unicode_eval evalbytes current_sub fc
373 The C<:default> bundle represents the feature set that is enabled before
374 any C<use feature> or C<no feature> declaration.
376 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
377 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
379 use feature ":5.14.0"; # same as ":5.14"
380 use feature ":5.14.1"; # same as ":5.14"
382 =head1 IMPLICIT LOADING
384 Instead of loading feature bundles by name, it is easier to let Perl do
385 implicit loading of a feature bundle for you.
387 There are two ways to load the C<feature> pragma implicitly:
393 By using the C<-E> switch on the Perl command-line instead of C<-e>.
394 That will enable the feature bundle for that version of Perl in the
395 main compilation unit (that is, the one-liner that follows C<-E>).
399 By explicitly requiring a minimum Perl version number for your program, with
400 the C<use VERSION> construct. That is,
409 and so on. Note how the trailing sub-version
410 is automatically stripped from the
413 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
417 with the same effect.
419 If the required version is older than Perl 5.10, the ":default" feature
420 bundle is automatically loaded instead.
430 croak("No features specified");
439 # A bare C<no feature> should reset to the default bundle
441 $^H &= ~($hint_uni8bit|$hint_mask);
451 my $bundle_number = $^H & $hint_mask;
452 my $features = $bundle_number != $hint_mask
453 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
455 # Features are enabled implicitly via bundle hints.
456 # Delete any keys that may be left over from last time.
457 delete @^H{ values(%feature) };
460 $^H{$feature{$_}} = 1;
461 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
466 if (substr($name, 0, 1) eq ":") {
467 my $v = substr($name, 1);
468 if (!exists $feature_bundle{$v}) {
469 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
470 if (!exists $feature_bundle{$v}) {
471 unknown_feature_bundle(substr($name, 1));
474 unshift @_, @{$feature_bundle{$v}};
477 if (!exists $feature{$name}) {
478 unknown_feature($name);
481 $^H{$feature{$name}} = 1;
482 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
484 delete $^H{$feature{$name}};
485 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
490 sub unknown_feature {
492 croak(sprintf('Feature "%s" is not supported by Perl %vd',
496 sub unknown_feature_bundle {
498 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',