Manual

- Overview
- Tutorials
- FAQs
- History / Changes
- License

Reference

- Language
- Functions
- Operators
- Special Variables
- Pragmas
- Utilities
- Internals
- Platform Specific

Modules

- A • B • C • D • E
- F • G • H • I • L
- M • N • O • P • S
- T • U • X

News / Blogs

- Perl Buzz
- Perl Iron Man
- Perlsphere
- Planet Perl
- TPF news
- Use Perl

See also

- CPAN
- Perl.org
- Perl.com
- Perl 5 Wiki
- Perl Jobs
- Perl Mongers
- Perl Monks

Contact

- Site designed and maintained by Jon Allen (JJ)
- http://perl.jonallen.info

- View the project page and FAQs

# feature

Perl 5 version 10.1 documentation
Go to top • Show page index • Download PDF

# feature

- NAME
- SYNOPSIS
- DESCRIPTION
  - Lexical effect
  - no feature
  - The 'switch' feature
  - The 'say' feature
  - the 'state' feature
- FEATURE BUNDLES
- IMPLICIT LOADING

# NAME

feature - Perl pragma to enable new syntactic features

# SYNOPSIS

        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

# DESCRIPTION

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

## `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.

## 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 `say` function.

See say for details.

## the 'state' feature

`use feature 'state'` tells the compiler to enable `state` variables.

See "Persistent Private Variables" in perlsub for details.

# FEATURE BUNDLES

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.

# IMPLICIT LOADING

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), you may prefer:

          use 5.010;

  with the same effect.

Page index

- NAME
- SYNOPSIS
- DESCRIPTION
  - Lexical effect
  - no feature
  - The 'switch' feature
  - The 'say' feature
  - the 'state' feature
- FEATURE BUNDLES
- IMPLICIT LOADING

Recently read

Tools

- Preferences