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.19"} = $feature_bundle{"5.15"};
38 $feature_bundle{"5.20"} = $feature_bundle{"5.15"};
39 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
42 our $hint_mask = 0x1c000000;
43 our @hint_bundles = qw( default 5.10 5.11 5.15 );
45 # This gets set (for now) in $^H as well as in %^H,
46 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
47 # See HINT_UNI_8_BIT in perl.h.
48 our $hint_uni8bit = 0x00000800;
51 # - think about versioned features (use feature switch => 2)
55 feature - Perl pragma to enable new features
59 use feature qw(say switch);
61 when (1) { say "\$foo == 1" }
62 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
63 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
64 when ($_ > 100) { say "\$foo > 100" }
65 default { say "None of the above" }
68 use feature ':5.10'; # loads all features available in perl 5.10
70 use v5.10; # implicitly loads :5.10 feature bundle
74 It is usually impossible to add new syntax to Perl without breaking
75 some existing programs. This pragma provides a way to minimize that
76 risk. New syntactic constructs, or new semantic meanings to older
77 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
78 only when the appropriate feature pragma is in scope. (Nevertheless, the
79 C<CORE::> prefix provides access to all Perl keywords, regardless of this
84 Like other pragmas (C<use strict>, for example), features have a lexical
85 effect. C<use feature qw(foo)> will only make the feature "foo" available
86 from that point to the end of the enclosing block.
90 say "say is available here";
92 print "But not here.\n";
96 Features can also be turned off by using C<no feature "foo">. This too
100 say "say is available here";
103 print "But not here.\n";
105 say "Yet it is here.";
107 C<no feature> with no features specified will reset to the default group. To
108 disable I<all> features (an unusual request!) use C<no feature ':all'>.
110 =head1 AVAILABLE FEATURES
112 =head2 The 'say' feature
114 C<use feature 'say'> tells the compiler to enable the Perl 6 style
117 See L<perlfunc/say> for details.
119 This feature is available starting with Perl 5.10.
121 =head2 The 'state' feature
123 C<use feature 'state'> tells the compiler to enable C<state>
126 See L<perlsub/"Persistent Private Variables"> for details.
128 This feature is available starting with Perl 5.10.
130 =head2 The 'switch' feature
132 C<use feature 'switch'> tells the compiler to enable the Perl 6
133 given/when construct.
135 See L<perlsyn/"Switch Statements"> for details.
137 This feature is available starting with Perl 5.10.
139 =head2 The 'unicode_strings' feature
141 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
142 in all string operations executed within its scope (unless they are also
143 within the scope of either C<use locale> or C<use bytes>). The same applies
144 to all regular expressions compiled within the scope, even if executed outside
145 it. It does not change the internal representation of strings, but only how
146 they are interpreted.
148 C<no feature 'unicode_strings'> tells the compiler to use the traditional
149 Perl semantics wherein the native character set semantics is used unless it is
150 clear to Perl that Unicode is desired. This can lead to some surprises
151 when the behavior suddenly changes. (See
152 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
153 potentially using Unicode in your program, the
154 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
156 This feature is available starting with Perl 5.12; was almost fully
157 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
159 =head2 The 'unicode_eval' and 'evalbytes' features
161 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
162 string, will evaluate it as a string of characters, ignoring any
163 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
164 the script, which only makes sense for a stream of bytes, not a string of
165 characters. Source filters are forbidden, as they also really only make
166 sense on strings of bytes. Any attempt to activate a source filter will
169 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
170 the argument passed to it as a string of bytes. It dies if the string
171 contains any characters outside the 8-bit range. Source filters work
172 within C<evalbytes>: they apply to the contents of the string being
175 Together, these two features are intended to replace the historical C<eval>
176 function, which has (at least) two bugs in it, that cannot easily be fixed
177 without breaking existing programs:
183 C<eval> behaves differently depending on the internal encoding of the
184 string, sometimes treating its argument as a string of bytes, and sometimes
185 as a string of characters.
189 Source filters activated within C<eval> leak out into whichever I<file>
190 scope is currently being compiled. To give an example with the CPAN module
193 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
196 C<evalbytes> fixes that to work the way one would expect:
198 use feature "evalbytes";
199 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
204 These two features are available starting with Perl 5.16.
206 =head2 The 'current_sub' feature
208 This provides the C<__SUB__> token that returns a reference to the current
209 subroutine or C<undef> outside of a subroutine.
211 This feature is available starting with Perl 5.16.
213 =head2 The 'array_base' feature
215 This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
216 L<arybase>. It is on by default but disabled under C<use v5.16> (see
217 L</IMPLICIT LOADING>, below).
219 This feature is available under this name starting with Perl 5.16. In
220 previous versions, it was simply on all the time, and this pragma knew
223 =head2 The 'fc' feature
225 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
226 which implements Unicode casefolding.
228 See L<perlfunc/fc> for details.
230 This feature is available from Perl 5.16 onwards.
232 =head2 The 'lexical_subs' feature
234 B<WARNING>: This feature is still experimental and the implementation may
235 change in future versions of Perl. For this reason, Perl will
236 warn when you use the feature, unless you have explicitly disabled the
239 no warnings "experimental::lexical_subs";
241 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
242 and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
244 This feature is available from Perl 5.18 onwards.
246 =head1 FEATURE BUNDLES
248 It's possible to load multiple features together, using
249 a I<feature bundle>. The name of a feature bundle is prefixed with
250 a colon, to distinguish it from an actual feature.
254 The following feature bundles are available:
256 bundle features included
257 --------- -----------------
260 :5.10 say state switch array_base
262 :5.12 say state switch unicode_strings array_base
264 :5.14 say state switch unicode_strings array_base
266 :5.16 say state switch unicode_strings
267 unicode_eval evalbytes current_sub fc
269 :5.18 say state switch unicode_strings
270 unicode_eval evalbytes current_sub fc
272 :5.20 say state switch unicode_strings
273 unicode_eval evalbytes current_sub fc
275 The C<:default> bundle represents the feature set that is enabled before
276 any C<use feature> or C<no feature> declaration.
278 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
279 no effect. Feature bundles are guaranteed to be the same for all sub-versions.
281 use feature ":5.14.0"; # same as ":5.14"
282 use feature ":5.14.1"; # same as ":5.14"
284 =head1 IMPLICIT LOADING
286 Instead of loading feature bundles by name, it is easier to let Perl do
287 implicit loading of a feature bundle for you.
289 There are two ways to load the C<feature> pragma implicitly:
295 By using the C<-E> switch on the Perl command-line instead of C<-e>.
296 That will enable the feature bundle for that version of Perl in the
297 main compilation unit (that is, the one-liner that follows C<-E>).
301 By explicitly requiring a minimum Perl version number for your program, with
302 the C<use VERSION> construct. That is,
311 and so on. Note how the trailing sub-version
312 is automatically stripped from the
315 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
319 with the same effect.
321 If the required version is older than Perl 5.10, the ":default" feature
322 bundle is automatically loaded instead.
332 croak("No features specified");
341 # A bare C<no feature> should reset to the default bundle
343 $^H &= ~($hint_uni8bit|$hint_mask);
353 my $bundle_number = $^H & $hint_mask;
354 my $features = $bundle_number != $hint_mask
355 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
357 # Features are enabled implicitly via bundle hints.
358 # Delete any keys that may be left over from last time.
359 delete @^H{ values(%feature) };
362 $^H{$feature{$_}} = 1;
363 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
368 if (substr($name, 0, 1) eq ":") {
369 my $v = substr($name, 1);
370 if (!exists $feature_bundle{$v}) {
371 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
372 if (!exists $feature_bundle{$v}) {
373 unknown_feature_bundle(substr($name, 1));
376 unshift @_, @{$feature_bundle{$v}};
379 if (!exists $feature{$name}) {
380 unknown_feature($name);
383 $^H{$feature{$name}} = 1;
384 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
386 delete $^H{$feature{$name}};
387 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
392 sub unknown_feature {
394 croak(sprintf('Feature "%s" is not supported by Perl %vd',
398 sub unknown_feature_bundle {
400 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',