feature - Perl pragma to enable new syntactic features


    use feature qw(switch say);
    given ($foo) {
        when (1)          { say "\$foo == 1" }
        when ([2,3])      { say "\$foo == 2 || \$foo == 3" }
        when (/^a[bc]d$/) { say "\$foo eq abd || \$foo eq acd" }
        when ($_ > 100)   { say "\$foo > 100" }
        default           { say "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.

Lexical effect

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";

\f(CWno feature\fP

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.

The 'switch' feature

use feature switch
tells the compiler to enable the Perl 6 given/when construct.

See Switch statements in perlsyn for details.

The 'say' feature

use feature say
tells the compiler to enable the Perl 6

See say in perlfunc for details.

the 'state' feature

use feature state
tells the compiler to enable

See Persistent Private Variables in perlsub 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 bundles are

use feature ":5.10"
use feature ":5.10.0"
, which both are equivalent to
use feature qw(switch say state)

In the forthcoming 5.10.X perl releases,

use feature ":5.10"
will be equivalent to the latest
use feature ":5.10.X"


There are two ways to load the

pragma implicitly :
o By using the
switch on the command-line instead of
. It enables all available features in the main compilation unit (that is, the one-liner.)
o By requiring explicitly a minimal Perl version number for your program, with the
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.0;

and so on.

But to avoid portability warnings (see use in perlfunc), you may prefer:

    use 5.010;

with the same effect.

openSUSE Logo