feature - Perl pragma to enable new syntactic features |
feature - Perl pragma to enable new syntactic features
use feature qw(switch); given ($foo) { when (1) { print "\$foo == 1" } when ([2,3]) { print "\$foo == 2 || \$foo == 3" } when (/^a[bc]d$/) { print "\$foo eq 'abd' || \$foo eq 'acd'" } when ($_ > 100) { print "\$foo > 100" } default { print "None of the above" } }
use feature ':5.10'; # loads all features available in perl 5.10
It is usually impossible to add new syntax to Perl without breaking
some existing programs. This pragma provides a way to minimize that
risk. New syntactic constructs can be enabled by use feature 'foo'
,
and will be parsed only when the appropriate feature pragma is in
scope.
Like other pragmas (use strict
, for example), features have a lexical
effect. use feature qw(foo)
will only make the feature "foo" available
from that point to the end of the enclosing block.
{ use feature 'say'; say "say is available here"; } print "But not here.\n";
no feature
Features can also be turned off by using no feature "foo"
. This too
has lexical effect.
use feature 'say'; say "say is available here"; { no feature 'say'; print "But not here.\n"; } say "Yet it is here.";
no feature
with no features specified will turn off all features.
use feature 'switch'
tells the compiler to enable the Perl 6
given/when construct.
See perlsyn/"Switch statements" for details.
It's possible to load a whole slew of features in one go, using
a feature bundle. The name of a feature bundle is prefixed with
a colon, to distinguish it from an actual feature. At present, the
only feature bundle is use feature ":5.10"
which is equivalent
to use feature qw(switch say state)
.
Specifying sub-versions such as the 0
in 5.10.0
in feature bundles has
no effect: feature bundles are guaranteed to be the same for all sub-versions.
There are two ways to load the feature
pragma implicitly :
By using the -E
switch on the command-line instead of -e
. It enables
all available features in the main compilation unit (that is, the one-liner.)
By requiring explicitly a minimal Perl version number for your program, with
the use VERSION
construct, and when the version is higher than or equal to
5.10.0. That is,
use 5.10.0;
will do an implicit
use feature ':5.10';
and so on. Note how the trailing sub-version is automatically stripped from the version.
But to avoid portability warnings (see use in the perlfunc manpage), you may prefer:
use 5.010;
with the same effect.
feature - Perl pragma to enable new syntactic features |