5 # (feature name) => (internal name, used in %^H)
7 switch => 'feature_switch',
9 state => "feature_state",
10 unicode_strings => "feature_unicode",
13 # This gets set (for now) in $^H as well as in %^H,
14 # for runtime speed of the uc/lc/ucfirst/lcfirst functions.
15 # See HINT_UNI_8_BIT in perl.h.
16 our $hint_uni8bit = 0x00000800;
18 # NB. the latest bundle must be loaded by the -E switch (see toke.c)
20 my %feature_bundle = (
21 "5.10" => [qw(switch say state)],
22 "5.11" => [qw(switch say state unicode_strings)],
23 "5.12" => [qw(switch say state unicode_strings)],
24 "5.13" => [qw(switch say state unicode_strings)],
25 "5.14" => [qw(switch say state unicode_strings)],
26 "5.15" => [qw(switch say state unicode_strings)],
30 $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
33 # - think about versioned features (use feature switch => 2)
37 feature - Perl pragma to enable new features
41 use feature qw(switch say);
43 when (1) { say "\$foo == 1" }
44 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
45 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
46 when ($_ > 100) { say "\$foo > 100" }
47 default { say "None of the above" }
50 use feature ':5.10'; # loads all features available in perl 5.10
54 It is usually impossible to add new syntax to Perl without breaking
55 some existing programs. This pragma provides a way to minimize that
56 risk. New syntactic constructs, or new semantic meanings to older
57 constructs, can be enabled by C<use feature 'foo'>, and will be parsed
58 only when the appropriate feature pragma is in scope.
62 Like other pragmas (C<use strict>, for example), features have a lexical
63 effect. C<use feature qw(foo)> will only make the feature "foo" available
64 from that point to the end of the enclosing block.
68 say "say is available here";
70 print "But not here.\n";
74 Features can also be turned off by using C<no feature "foo">. This too
78 say "say is available here";
81 print "But not here.\n";
83 say "Yet it is here.";
85 C<no feature> with no features specified will turn off all features.
87 =head2 The 'switch' feature
89 C<use feature 'switch'> tells the compiler to enable the Perl 6
92 See L<perlsyn/"Switch statements"> for details.
94 =head2 The 'say' feature
96 C<use feature 'say'> tells the compiler to enable the Perl 6
99 See L<perlfunc/say> for details.
101 =head2 the 'state' feature
103 C<use feature 'state'> tells the compiler to enable C<state>
106 See L<perlsub/"Persistent Private Variables"> for details.
108 =head2 the 'unicode_strings' feature
110 C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
111 in all string operations executed within its scope (unless they are also
112 within the scope of either C<use locale> or C<use bytes>). The same applies
113 to all regular expressions compiled within the scope, even if executed outside
116 C<no feature 'unicode_strings'> tells the compiler to use the traditional
117 Perl semantics wherein the native character set semantics is used unless it is
118 clear to Perl that Unicode is desired. This can lead to some surprises
119 when the behavior suddenly changes. (See
120 L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
121 potentially using Unicode in your program, the
122 C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
124 This subpragma is available starting with Perl 5.11.3, but was not fully
125 implemented until 5.13.8.
127 =head1 FEATURE BUNDLES
129 It's possible to load a whole slew of features in one go, using
130 a I<feature bundle>. The name of a feature bundle is prefixed with
131 a colon, to distinguish it from an actual feature. At present, the
132 only feature bundles correspond to Perl releases, e.g. C<use feature
133 ":5.10"> which is equivalent to C<use feature qw(switch say state)>.
135 By convention, the feature bundle for any given Perl release includes
136 the features of previous releases, down to and including 5.10, the
137 first official release to provide this facility. Since Perl 5.12
138 only provides one new feature, C<unicode_strings>, and Perl 5.14
139 provides none, C<use feature ":5.14"> is equivalent to C<use feature
140 qw(switch say state unicode_strings)>.
142 Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
143 no effect: feature bundles are guaranteed to be the same for all sub-versions.
145 Note that instead of using release-based feature bundles it is usually
146 better, and shorter, to use implicit loading as described below.
148 =head1 IMPLICIT LOADING
150 There are two ways to load the C<feature> pragma implicitly :
156 By using the C<-E> switch on the command-line instead of C<-e>. It enables
157 all available features in the main compilation unit (that is, the one-liner.)
161 By requiring explicitly a minimal Perl version number for your program, with
162 the C<use VERSION> construct, and when the version is higher than or equal to
171 and so on. Note how the trailing sub-version is automatically stripped from the
174 But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
178 with the same effect.
187 croak("No features specified");
190 my $name = shift(@_);
191 if (substr($name, 0, 1) eq ":") {
192 my $v = substr($name, 1);
193 if (!exists $feature_bundle{$v}) {
194 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
195 if (!exists $feature_bundle{$v}) {
196 unknown_feature_bundle(substr($name, 1));
199 unshift @_, @{$feature_bundle{$v}};
202 if (!exists $feature{$name}) {
203 unknown_feature($name);
205 $^H{$feature{$name}} = 1;
206 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
213 # A bare C<no feature> should disable *all* features
215 delete @^H{ values(%feature) };
216 $^H &= ~ $hint_uni8bit;
222 if (substr($name, 0, 1) eq ":") {
223 my $v = substr($name, 1);
224 if (!exists $feature_bundle{$v}) {
225 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
226 if (!exists $feature_bundle{$v}) {
227 unknown_feature_bundle(substr($name, 1));
230 unshift @_, @{$feature_bundle{$v}};
233 if (!exists($feature{$name})) {
234 unknown_feature($name);
237 delete $^H{$feature{$name}};
238 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
243 sub unknown_feature {
245 croak(sprintf('Feature "%s" is not supported by Perl %vd',
249 sub unknown_feature_bundle {
251 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',