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 evalbytes => 'feature_evalbytes',
16 array_base => 'feature_arybase',
17 current_sub => 'feature___SUB__',
18 lexical_subs => 'feature_lexsubs',
19 unicode_eval => 'feature_unieval',
20 unicode_strings => 'feature_unicode',
23 our %feature_bundle = (
24 "5.10" => [qw(array_base say state switch)],
25 "5.11" => [qw(array_base say state switch unicode_strings)],
26 "5.15" => [qw(current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
27 "all" => [qw(array_base current_sub evalbytes fc lexical_subs say state switch unicode_eval unicode_strings)],
28 "default" => [qw(array_base)],
31 $feature_bundle{"5.12"} = $feature_bundle{"5.11"};
32 $feature_bundle{"5.13"} = $feature_bundle{"5.11"};
33 $feature_bundle{"5.14"} = $feature_bundle{"5.11"};
34 $feature_bundle{"5.16"} = $feature_bundle{"5.15"};
35 $feature_bundle{"5.17"} = $feature_bundle{"5.15"};
36 $feature_bundle{"5.18"} = $feature_bundle{"5.15"};
37 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
40 our $hint_mask = 0x1c000000;
41 our @hint_bundles = qw( default 5.10 5.11 5.15 );
43 # This gets set (for now) in $^H as well as in %^H,
44 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
45 # See HINT_UNI_8_BIT in perl.h.
46 our $hint_uni8bit = 0x00000800;
49 # - think about versioned features (use feature switch => 2)
53 feature - Perl pragma to enable new features
57 use feature qw(say switch);
59 when (1) { say "\$foo == 1" }
60 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
61 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
62 when ($_ > 100) { say "\$foo > 100" }
63 default { say "None of the above" }
66 use feature ':5.10'; # loads all features available in perl 5.10
68 use v5.10; # implicitly loads :5.10 feature bundle
72 It is usually impossible to add new syntax to Perl without breaking
73 some existing programs. This pragma provides a way to minimize that
74 risk. New syntactic constructs, or new semantic meanings to older
75 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
76 only when the appropriate feature pragma is in scope. (Nevertheless, the
77 C<CORE::> prefix provides access to all Perl keywords, regardless of this
82 Like other pragmas (C<use strict>, for example), features have a lexical
83 effect. C<use feature qw(foo)> will only make the feature "foo" available
84 from that point to the end of the enclosing block.
88 say "say is available here";
90 print "But not here.\n";
94 Features can also be turned off by using C<no feature "foo">. This too
98 say "say is available here";
101 print "But not here.\n";
103 say "Yet it is here.";
105 C<no feature> with no features specified will reset to the default group. To
106 disable I<all> features (an unusual request!) use C<no feature ':all'>.
108 =head1 AVAILABLE FEATURES
110 =head2 The 'say' feature
112 C<use feature 'say'> tells the compiler to enable the Perl 6 style
115 See L<perlfunc/say> for details.
117 This feature is available starting with Perl 5.10.
119 =head2 The 'state' feature
121 C<use feature 'state'> tells the compiler to enable C<state>
124 See L<perlsub/"Persistent Private Variables"> for details.
126 This feature is available starting with Perl 5.10.
128 =head2 The 'switch' feature
130 C<use feature 'switch'> tells the compiler to enable the Perl 6
131 given/when construct.
133 See L<perlsyn/"Switch Statements"> for details.
135 This feature is available starting with Perl 5.10.
137 =head2 The 'unicode_strings' feature
139 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
140 in all string operations executed within its scope (unless they are also
141 within the scope of either C<use locale> or C<use bytes>). The same applies
142 to all regular expressions compiled within the scope, even if executed outside
143 it. It does not change the internal representation of strings, but only how
144 they are interpreted.
146 C<no feature 'unicode_strings'> tells the compiler to use the traditional
147 Perl semantics wherein the native character set semantics is used unless it is
148 clear to Perl that Unicode is desired. This can lead to some surprises
149 when the behavior suddenly changes. (See
150 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
151 potentially using Unicode in your program, the
152 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
154 This feature is available starting with Perl 5.12; was almost fully
155 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
157 =head2 The 'unicode_eval' and 'evalbytes' features
159 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
160 string, will evaluate it as a string of characters, ignoring any
161 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
162 the script, which only makes sense for a stream of bytes, not a string of
163 characters. Source filters are forbidden, as they also really only make
164 sense on strings of bytes. Any attempt to activate a source filter will
167 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
168 the argument passed to it as a string of bytes. It dies if the string
169 contains any characters outside the 8-bit range. Source filters work
170 within C<evalbytes>: they apply to the contents of the string being
173 Together, these two features are intended to replace the historical C<eval>
174 function, which has (at least) two bugs in it, that cannot easily be fixed
175 without breaking existing programs:
181 C<eval> behaves differently depending on the internal encoding of the
182 string, sometimes treating its argument as a string of bytes, and sometimes
183 as a string of characters.
187 Source filters activated within C<eval> leak out into whichever I<file>
188 scope is currently being compiled. To give an example with the CPAN module
191 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
194 C<evalbytes> fixes that to work the way one would expect:
196 use feature "evalbytes";
197 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
202 These two features are available starting with Perl 5.16.
204 =head2 The 'current_sub' feature
206 This provides the C<__SUB__> token that returns a reference to the current
207 subroutine or C<undef> outside of a subroutine.
209 This feature is available starting with Perl 5.16.
211 =head2 The 'array_base' feature
213 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
214 L<arybase>. It is on by default but disabled under C<use v5.16> (see
215 L</IMPLICIT LOADING>, below).
217 This feature is available under this name starting with Perl 5.16. In
218 previous versions, it was simply on all the time, and this pragma knew
221 =head2 The 'fc' feature
223 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
224 which implements Unicode casefolding.
226 See L<perlfunc/fc> for details.
228 This feature is available from Perl 5.16 onwards.
230 =head2 The 'lexical_subs' feature
232 B<WARNING>: This feature is still experimental and the implementation may
233 change in future versions of Perl. For this reason, Perl will
234 warn when you use the feature, unless you have explicitly disabled the
237 no warnings "experimental::lexical_subs";
239 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
240 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
242 This feature is available from Perl 5.18 onwards.
244 =head1 FEATURE BUNDLES
246 It's possible to load multiple features together, using
247 a I<feature bundle>. The name of a feature bundle is prefixed with
248 a colon, to distinguish it from an actual feature.
252 The following feature bundles are available:
254 bundle features included
255 --------- -----------------
258 :5.10 say state switch array_base
260 :5.12 say state switch unicode_strings array_base
262 :5.14 say state switch unicode_strings array_base
264 :5.16 say state switch unicode_strings
265 unicode_eval evalbytes current_sub fc
267 :5.18 say state switch unicode_strings
268 unicode_eval evalbytes current_sub fc
270 The C<:default> bundle represents the feature set that is enabled before
271 any C<use feature> or C<no feature> declaration.
273 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
274 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
276 use feature ":5.14.0"; # same as ":5.14"
277 use feature ":5.14.1"; # same as ":5.14"
279 =head1 IMPLICIT LOADING
281 Instead of loading feature bundles by name, it is easier to let Perl do
282 implicit loading of a feature bundle for you.
284 There are two ways to load the C<feature> pragma implicitly:
290 By using the C<-E> switch on the Perl command-line instead of C<-e>.
291 That will enable the feature bundle for that version of Perl in the
292 main compilation unit (that is, the one-liner that follows C<-E>).
296 By explicitly requiring a minimum Perl version number for your program, with
297 the C<use VERSION> construct. That is,
306 and so on. Note how the trailing sub-version
307 is automatically stripped from the
310 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
314 with the same effect.
316 If the required version is older than Perl 5.10, the ":default" feature
317 bundle is automatically loaded instead.
327 croak("No features specified");
336 # A bare C<no feature> should reset to the default bundle
338 $^H &= ~($hint_uni8bit|$hint_mask);
348 my $bundle_number = $^H & $hint_mask;
349 my $features = $bundle_number != $hint_mask
350 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
352 # Features are enabled implicitly via bundle hints.
353 # Delete any keys that may be left over from last time.
354 delete @^H{ values(%feature) };
357 $^H{$feature{$_}} = 1;
358 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
363 if (substr($name, 0, 1) eq ":") {
364 my $v = substr($name, 1);
365 if (!exists $feature_bundle{$v}) {
366 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
367 if (!exists $feature_bundle{$v}) {
368 unknown_feature_bundle(substr($name, 1));
371 unshift @_, @{$feature_bundle{$v}};
374 if (!exists $feature{$name}) {
375 unknown_feature($name);
378 $^H{$feature{$name}} = 1;
379 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
381 delete $^H{$feature{$name}};
382 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
387 sub unknown_feature {
389 croak(sprintf('Feature "%s" is not supported by Perl %vd',
393 sub unknown_feature_bundle {
395 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',