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