5 # (feature name) => (internal name, used in %^H)
8 state => 'feature_state',
9 switch => 'feature_switch',
10 evalbytes => 'feature_evalbytes',
11 current_sub => 'feature___SUB__',
12 unicode_eval => 'feature_unieval',
13 unicode_strings => 'feature_unicode',
16 # This gets set (for now) in $^H as well as in %^H,
17 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
18 # See HINT_UNI_8_BIT in perl.h.
19 our $hint_uni8bit = 0x00000800;
21 # NB. the latest bundle must be loaded by the -E switch (see toke.c)
23 our %feature_bundle = (
24 "5.10" => [qw(say state switch)],
25 "5.11" => [qw(say state switch unicode_strings)],
26 "5.15" => [qw(say state switch unicode_strings unicode_eval
27 evalbytes current_sub)],
30 # Each of these is the same as the previous bundle
32 $feature_bundle{"5.$_"} = $feature_bundle{"5.".($_-1)}
36 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
39 # - think about versioned features (use feature switch => 2)
43 feature - Perl pragma to enable new features
47 use feature qw(say switch);
49 when (1) { say "\$foo == 1" }
50 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
51 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
52 when ($_ > 100) { say "\$foo > 100" }
53 default { say "None of the above" }
56 use feature ':5.10'; # loads all features available in perl 5.10
60 It is usually impossible to add new syntax to Perl without breaking
61 some existing programs. This pragma provides a way to minimize that
62 risk. New syntactic constructs, or new semantic meanings to older
63 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
64 only when the appropriate feature pragma is in scope. (Nevertheless, the
65 C<CORE::> prefix provides access to all Perl keywords, regardless of this
70 Like other pragmas (C<use strict>, for example), features have a lexical
71 effect. C<use feature qw(foo)> will only make the feature "foo" available
72 from that point to the end of the enclosing block.
76 say "say is available here";
78 print "But not here.\n";
82 Features can also be turned off by using C<no feature "foo">. This too
86 say "say is available here";
89 print "But not here.\n";
91 say "Yet it is here.";
93 C<no feature> with no features specified will turn off all features.
95 =head2 The 'say' feature
97 C<use feature 'say'> tells the compiler to enable the Perl 6
100 See L<perlfunc/say> for details.
102 =head2 the 'state' feature
104 C<use feature 'state'> tells the compiler to enable C<state>
107 See L<perlsub/"Persistent Private Variables"> for details.
109 =head2 The 'switch' feature
111 C<use feature 'switch'> tells the compiler to enable the Perl 6
112 given/when construct.
114 See L<perlsyn/"Switch statements"> for details.
116 =head2 the 'unicode_strings' feature
118 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
119 in all string operations executed within its scope (unless they are also
120 within the scope of either C<use locale> or C<use bytes>). The same applies
121 to all regular expressions compiled within the scope, even if executed outside
124 C<no feature 'unicode_strings'> tells the compiler to use the traditional
125 Perl semantics wherein the native character set semantics is used unless it is
126 clear to Perl that Unicode is desired. This can lead to some surprises
127 when the behavior suddenly changes. (See
128 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
129 potentially using Unicode in your program, the
130 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
132 This subpragma is available starting with Perl 5.11.3, but was not fully
133 implemented until 5.13.8.
135 =head2 the 'unicode_eval' and 'evalbytes' features
137 Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
138 string, will evaluate it as a string of characters, ignoring any
139 C<use utf8> declarations. C<use utf8> exists to declare the encoding of
140 the script, which only makes sense for a stream of bytes, not a string of
141 characters. Source filters are forbidden, as they also really only make
142 sense on strings of bytes. Any attempt to activate a source filter will
145 The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
146 the argument passed to it as a string of bytes. It dies if the string
147 contains any characters outside the 8-bit range. Source filters work
148 within C<evalbytes>: they apply to the contents of the string being
151 Together, these two features are intended to replace the historical C<eval>
152 function, which has (at least) two bugs in it, that cannot easily be fixed
153 without breaking existing programs:
159 C<eval> behaves differently depending on the internal encoding of the
160 string, sometimes treating its argument as a string of bytes, and sometimes
161 as a string of characters.
165 Source filters activated within C<eval> leak out into whichever I<file>
166 scope is currently being compiled. To give an example with the CPAN module
169 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
172 C<evalbytes> fixes that to work the way one would expect:
174 use feature "evalbytes";
175 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
180 These two features are available starting with Perl 5.16.
182 =head2 The 'current_sub' feature
184 This provides the C<__SUB__> token that returns a reference to the current
185 subroutine or C<undef> outside of a subroutine.
187 This feature is available starting with Perl 5.16.
189 =head1 FEATURE BUNDLES
191 It's possible to load a whole slew of features in one go, using
192 a I<feature bundle>. The name of a feature bundle is prefixed with
193 a colon, to distinguish it from an actual feature. At present, the
194 only feature bundles correspond to Perl releases, e.g. C<use feature
195 ":5.10"> which is equivalent to C<use feature qw(switch say state)>.
197 By convention, the feature bundle for any given Perl release includes
198 the features of previous releases, down to and including 5.10, the
199 first official release to provide this facility. Since Perl 5.12
200 only provides one new feature, C<unicode_strings>, and Perl 5.14
201 provides none, C<use feature ":5.14"> is equivalent to C<use feature
202 qw(switch say state unicode_strings)>.
204 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
205 no effect: feature bundles are guaranteed to be the same for all sub-versions.
207 Note that instead of using release-based feature bundles it is usually
208 better, and shorter, to use implicit loading as described below.
210 =head1 IMPLICIT LOADING
212 There are two ways to load the C<feature> pragma implicitly :
218 By using the C<-E> switch on the command-line instead of C<-e>. It enables
219 all available features in the main compilation unit (that is, the one-liner.)
223 By requiring explicitly a minimal Perl version number for your program, with
224 the C<use VERSION> construct, and when the version is higher than or equal to
233 and so on. Note how the trailing sub-version is automatically stripped from the
236 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
240 with the same effect.
249 croak("No features specified");
252 my $name = shift(@_);
253 if (substr($name, 0, 1) eq ":") {
254 my $v = substr($name, 1);
255 if (!exists $feature_bundle{$v}) {
256 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
257 if (!exists $feature_bundle{$v}) {
258 unknown_feature_bundle(substr($name, 1));
261 unshift @_, @{$feature_bundle{$v}};
264 if (!exists $feature{$name}) {
265 unknown_feature($name);
267 $^H{$feature{$name}} = 1;
268 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
275 # A bare C<no feature> should disable *all* features
277 delete @^H{ values(%feature) };
278 $^H &= ~ $hint_uni8bit;
284 if (substr($name, 0, 1) eq ":") {
285 my $v = substr($name, 1);
286 if (!exists $feature_bundle{$v}) {
287 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
288 if (!exists $feature_bundle{$v}) {
289 unknown_feature_bundle(substr($name, 1));
292 unshift @_, @{$feature_bundle{$v}};
295 if (!exists($feature{$name})) {
296 unknown_feature($name);
299 delete $^H{$feature{$name}};
300 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
305 sub unknown_feature {
307 croak(sprintf('Feature "%s" is not supported by Perl %vd',
311 sub unknown_feature_bundle {
313 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',