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