state.t: Improve test for #123029
[perl.git] / lib / feature.pm
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!
5
6 package feature;
7
8 our $VERSION = '1.38';
9
10 our %feature = (
11     fc              => 'feature_fc',
12     say             => 'feature_say',
13     state           => 'feature_state',
14     switch          => 'feature_switch',
15     evalbytes       => 'feature_evalbytes',
16     postderef       => 'feature_postderef',
17     array_base      => 'feature_arybase',
18     signatures      => 'feature_signatures',
19     current_sub     => 'feature___SUB__',
20     refaliasing     => 'feature_refaliasing',
21     lexical_subs    => 'feature_lexsubs',
22     postderef_qq    => 'feature_postderef_qq',
23     unicode_eval    => 'feature_unieval',
24     unicode_strings => 'feature_unicode',
25 );
26
27 our %feature_bundle = (
28     "5.10"    => [qw(array_base say state switch)],
29     "5.11"    => [qw(array_base say state switch unicode_strings)],
30     "5.15"    => [qw(current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
31     "all"     => [qw(array_base current_sub evalbytes fc lexical_subs postderef postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
32     "default" => [qw(array_base)],
33 );
34
35 $feature_bundle{"5.12"} = $feature_bundle{"5.11"};
36 $feature_bundle{"5.13"} = $feature_bundle{"5.11"};
37 $feature_bundle{"5.14"} = $feature_bundle{"5.11"};
38 $feature_bundle{"5.16"} = $feature_bundle{"5.15"};
39 $feature_bundle{"5.17"} = $feature_bundle{"5.15"};
40 $feature_bundle{"5.18"} = $feature_bundle{"5.15"};
41 $feature_bundle{"5.19"} = $feature_bundle{"5.15"};
42 $feature_bundle{"5.20"} = $feature_bundle{"5.15"};
43 $feature_bundle{"5.21"} = $feature_bundle{"5.15"};
44 $feature_bundle{"5.22"} = $feature_bundle{"5.15"};
45 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
46
47 our $hint_shift   = 26;
48 our $hint_mask    = 0x1c000000;
49 our @hint_bundles = qw( default 5.10 5.11 5.15 );
50
51 # This gets set (for now) in $^H as well as in %^H,
52 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
53 # See HINT_UNI_8_BIT in perl.h.
54 our $hint_uni8bit = 0x00000800;
55
56 # TODO:
57 # - think about versioned features (use feature switch => 2)
58
59 =head1 NAME
60
61 feature - Perl pragma to enable new features
62
63 =head1 SYNOPSIS
64
65     use feature qw(say switch);
66     given ($foo) {
67         when (1)          { say "\$foo == 1" }
68         when ([2,3])      { say "\$foo == 2 || \$foo == 3" }
69         when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
70         when ($_ > 100)   { say "\$foo > 100" }
71         default           { say "None of the above" }
72     }
73
74     use feature ':5.10'; # loads all features available in perl 5.10
75
76     use v5.10;           # implicitly loads :5.10 feature bundle
77
78 =head1 DESCRIPTION
79
80 It is usually impossible to add new syntax to Perl without breaking
81 some existing programs.  This pragma provides a way to minimize that
82 risk. New syntactic constructs, or new semantic meanings to older
83 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
84 only when the appropriate feature pragma is in scope.  (Nevertheless, the
85 C<CORE::> prefix provides access to all Perl keywords, regardless of this
86 pragma.)
87
88 =head2 Lexical effect
89
90 Like other pragmas (C<use strict>, for example), features have a lexical
91 effect.  C<use feature qw(foo)> will only make the feature "foo" available
92 from that point to the end of the enclosing block.
93
94     {
95         use feature 'say';
96         say "say is available here";
97     }
98     print "But not here.\n";
99
100 =head2 C<no feature>
101
102 Features can also be turned off by using C<no feature "foo">.  This too
103 has lexical effect.
104
105     use feature 'say';
106     say "say is available here";
107     {
108         no feature 'say';
109         print "But not here.\n";
110     }
111     say "Yet it is here.";
112
113 C<no feature> with no features specified will reset to the default group.  To
114 disable I<all> features (an unusual request!) use C<no feature ':all'>.
115
116 =head1 AVAILABLE FEATURES
117
118 =head2 The 'say' feature
119
120 C<use feature 'say'> tells the compiler to enable the Perl 6 style
121 C<say> function.
122
123 See L<perlfunc/say> for details.
124
125 This feature is available starting with Perl 5.10.
126
127 =head2 The 'state' feature
128
129 C<use feature 'state'> tells the compiler to enable C<state>
130 variables.
131
132 See L<perlsub/"Persistent Private Variables"> for details.
133
134 This feature is available starting with Perl 5.10.
135
136 =head2 The 'switch' feature
137
138 B<WARNING>: Because the L<smartmatch operator|perlop/"Smartmatch Operator"> is
139 experimental, Perl will warn when you use this feature, unless you have
140 explicitly disabled the warning:
141
142     no warnings "experimental::smartmatch";
143
144 C<use feature 'switch'> tells the compiler to enable the Perl 6
145 given/when construct.
146
147 See L<perlsyn/"Switch Statements"> for details.
148
149 This feature is available starting with Perl 5.10.
150
151 =head2 The 'unicode_strings' feature
152
153 C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
154 in all string operations executed within its scope (unless they are also
155 within the scope of either C<use locale> or C<use bytes>).  The same applies
156 to all regular expressions compiled within the scope, even if executed outside
157 it.  It does not change the internal representation of strings, but only how
158 they are interpreted.
159
160 C<no feature 'unicode_strings'> tells the compiler to use the traditional
161 Perl rules wherein the native character set rules is used unless it is
162 clear to Perl that Unicode is desired.  This can lead to some surprises
163 when the behavior suddenly changes.  (See
164 L<perlunicode/The "Unicode Bug"> for details.)  For this reason, if you are
165 potentially using Unicode in your program, the
166 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
167
168 This feature is available starting with Perl 5.12; was almost fully
169 implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
170
171 =head2 The 'unicode_eval' and 'evalbytes' features
172
173 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
174 string, will evaluate it as a string of characters, ignoring any
175 C<use utf8> declarations.  C<use utf8> exists to declare the encoding of
176 the script, which only makes sense for a stream of bytes, not a string of
177 characters.  Source filters are forbidden, as they also really only make
178 sense on strings of bytes.  Any attempt to activate a source filter will
179 result in an error.
180
181 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
182 the argument passed to it as a string of bytes.  It dies if the string
183 contains any characters outside the 8-bit range.  Source filters work
184 within C<evalbytes>: they apply to the contents of the string being
185 evaluated.
186
187 Together, these two features are intended to replace the historical C<eval>
188 function, which has (at least) two bugs in it, that cannot easily be fixed
189 without breaking existing programs:
190
191 =over
192
193 =item *
194
195 C<eval> behaves differently depending on the internal encoding of the
196 string, sometimes treating its argument as a string of bytes, and sometimes
197 as a string of characters.
198
199 =item *
200
201 Source filters activated within C<eval> leak out into whichever I<file>
202 scope is currently being compiled.  To give an example with the CPAN module
203 L<Semi::Semicolons>:
204
205     BEGIN { eval "use Semi::Semicolons;  # not filtered here " }
206     # filtered here!
207
208 C<evalbytes> fixes that to work the way one would expect:
209
210     use feature "evalbytes";
211     BEGIN { evalbytes "use Semi::Semicolons;  # filtered " }
212     # not filtered
213
214 =back
215
216 These two features are available starting with Perl 5.16.
217
218 =head2 The 'current_sub' feature
219
220 This provides the C<__SUB__> token that returns a reference to the current
221 subroutine or C<undef> outside of a subroutine.
222
223 This feature is available starting with Perl 5.16.
224
225 =head2 The 'array_base' feature
226
227 This feature supports the legacy C<$[> variable.  See L<perlvar/$[> and
228 L<arybase>.  It is on by default but disabled under C<use v5.16> (see
229 L</IMPLICIT LOADING>, below).
230
231 This feature is available under this name starting with Perl 5.16.  In
232 previous versions, it was simply on all the time, and this pragma knew
233 nothing about it.
234
235 =head2 The 'fc' feature
236
237 C<use feature 'fc'> tells the compiler to enable the C<fc> function,
238 which implements Unicode casefolding.
239
240 See L<perlfunc/fc> for details.
241
242 This feature is available from Perl 5.16 onwards.
243
244 =head2 The 'lexical_subs' feature
245
246 B<WARNING>: This feature is still experimental and the implementation may
247 change in future versions of Perl.  For this reason, Perl will
248 warn when you use the feature, unless you have explicitly disabled the
249 warning:
250
251     no warnings "experimental::lexical_subs";
252
253 This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
254 and C<our sub foo> syntax.  See L<perlsub/Lexical Subroutines> for details.
255
256 This feature is available from Perl 5.18 onwards.
257
258 =head2 The 'signatures' feature
259
260 B<WARNING>: This feature is still experimental and the implementation may
261 change in future versions of Perl.  For this reason, Perl will
262 warn when you use the feature, unless you have explicitly disabled the
263 warning:
264
265     no warnings "experimental::signatures";
266
267 This enables unpacking of subroutine arguments into lexical variables
268 by syntax such as
269
270     sub foo ($left, $right) {
271         return $left + $right;
272     }
273
274 See L<perlsub/Signatures> for details.
275
276 This feature is available from Perl 5.20 onwards.
277
278 =head2 The 'refaliasing' feature
279
280 B<WARNING>: This feature is still experimental and the implementation may
281 change in future versions of Perl.  For this reason, Perl will
282 warn when you use the feature, unless you have explicitly disabled the
283 warning:
284
285     no warnings "experimental::refaliasing";
286
287 This enables aliasing via assignment to references:
288
289     \$a = \$b; # $a and $b now point to the same scalar
290     \@a = \@b; #                     to the same array
291     \%a = \%b;
292     \&a = \&b;
293     foreach \%hash (@array_of_hash_refs) {
294         ...
295     }
296
297 See L<perlref/Assigning to References> for details.
298
299 This feature is available from Perl 5.22 onwards.
300
301 =head1 FEATURE BUNDLES
302
303 It's possible to load multiple features together, using
304 a I<feature bundle>.  The name of a feature bundle is prefixed with
305 a colon, to distinguish it from an actual feature.
306
307   use feature ":5.10";
308
309 The following feature bundles are available:
310
311   bundle    features included
312   --------- -----------------
313   :default  array_base
314
315   :5.10     say state switch array_base
316
317   :5.12     say state switch unicode_strings array_base
318
319   :5.14     say state switch unicode_strings array_base
320
321   :5.16     say state switch unicode_strings
322             unicode_eval evalbytes current_sub fc
323
324   :5.18     say state switch unicode_strings
325             unicode_eval evalbytes current_sub fc
326
327   :5.20     say state switch unicode_strings
328             unicode_eval evalbytes current_sub fc
329
330   :5.22     say state switch unicode_strings
331             unicode_eval evalbytes current_sub fc
332
333 The C<:default> bundle represents the feature set that is enabled before
334 any C<use feature> or C<no feature> declaration.
335
336 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
337 no effect.  Feature bundles are guaranteed to be the same for all sub-versions.
338
339   use feature ":5.14.0";    # same as ":5.14"
340   use feature ":5.14.1";    # same as ":5.14"
341
342 =head1 IMPLICIT LOADING
343
344 Instead of loading feature bundles by name, it is easier to let Perl do
345 implicit loading of a feature bundle for you.
346
347 There are two ways to load the C<feature> pragma implicitly:
348
349 =over 4
350
351 =item *
352
353 By using the C<-E> switch on the Perl command-line instead of C<-e>.
354 That will enable the feature bundle for that version of Perl in the
355 main compilation unit (that is, the one-liner that follows C<-E>).
356
357 =item *
358
359 By explicitly requiring a minimum Perl version number for your program, with
360 the C<use VERSION> construct.  That is,
361
362     use v5.10.0;
363
364 will do an implicit
365
366     no feature ':all';
367     use feature ':5.10';
368
369 and so on.  Note how the trailing sub-version
370 is automatically stripped from the
371 version.
372
373 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
374
375     use 5.010;
376
377 with the same effect.
378
379 If the required version is older than Perl 5.10, the ":default" feature
380 bundle is automatically loaded instead.
381
382 =back
383
384 =cut
385
386 sub import {
387     my $class = shift;
388
389     if (!@_) {
390         croak("No features specified");
391     }
392
393     __common(1, @_);
394 }
395
396 sub unimport {
397     my $class = shift;
398
399     # A bare C<no feature> should reset to the default bundle
400     if (!@_) {
401         $^H &= ~($hint_uni8bit|$hint_mask);
402         return;
403     }
404
405     __common(0, @_);
406 }
407
408
409 sub __common {
410     my $import = shift;
411     my $bundle_number = $^H & $hint_mask;
412     my $features = $bundle_number != $hint_mask
413         && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
414     if ($features) {
415         # Features are enabled implicitly via bundle hints.
416         # Delete any keys that may be left over from last time.
417         delete @^H{ values(%feature) };
418         $^H |= $hint_mask;
419         for (@$features) {
420             $^H{$feature{$_}} = 1;
421             $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
422         }
423     }
424     while (@_) {
425         my $name = shift;
426         if (substr($name, 0, 1) eq ":") {
427             my $v = substr($name, 1);
428             if (!exists $feature_bundle{$v}) {
429                 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
430                 if (!exists $feature_bundle{$v}) {
431                     unknown_feature_bundle(substr($name, 1));
432                 }
433             }
434             unshift @_, @{$feature_bundle{$v}};
435             next;
436         }
437         if (!exists $feature{$name}) {
438             unknown_feature($name);
439         }
440         if ($import) {
441             $^H{$feature{$name}} = 1;
442             $^H |= $hint_uni8bit if $name eq 'unicode_strings';
443         } else {
444             delete $^H{$feature{$name}};
445             $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
446         }
447     }
448 }
449
450 sub unknown_feature {
451     my $feature = shift;
452     croak(sprintf('Feature "%s" is not supported by Perl %vd',
453             $feature, $^V));
454 }
455
456 sub unknown_feature_bundle {
457     my $feature = shift;
458     croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
459             $feature, $^V));
460 }
461
462 sub croak {
463     require Carp;
464     Carp::croak(@_);
465 }
466
467 1;
468
469 # ex: set ro: