feature-1.11 > feature


feature - Perl pragma to enable new syntactic features

feature - 新しい構文上の機能を有効にするプラグマ


    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.

既に存在しているプログラムを壊すことなく、Perl に新しい文法を追加することは、 普通は不可能です。 このプラグマは、リスクを最小化する方法を提供します。 新しい文法構造は use feature 'foo' で有効化され、適切な feature プラグマが スコープ内にある場合にのみパースされます。


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 strict のような) その他のプラグマと同様、feature は レキシカルな効果を持ちます。 use feature qw(foo) は、この地点からブロックの終わりまでの間だけ、 "foo" 機能を利用可能にします。

        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.

機能は no feature "foo" を使うことで無効にすることも出来ます。 これもまたレキシカルな効果を持ちます。

    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.

no feature と、機能を指定せずに使うと、全ての機能が無効になります。

'switch' 機能

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

use feature 'switch' は、コンパイラに Perl 6 given/when 構文を 有効にするように伝えます。

詳しくは "Switch statements" in perlsyn を参照してください。

'say' 機能

use feature 'say' tells the compiler to enable the Perl 6 say function.

use feature 'say' は、コンパイラに Perl 6 say 関数を有効にするように 伝えます。

See "say" in perlfunc for details.

詳しくは "say" in perlfunc を参照してください。

'state' 機能

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

use feature 'state' は、コンパイラに state 変数を有効にするように 伝えます。

詳しくは "Persistent Private Variables" in perlsub を参照してください。


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" and use feature ":5.10.0", which both are equivalent to use feature qw(switch say state).

大量の機能全体を 1 回で読み込むためには、機能の束 (feature bundle) が 使えます。 機能の束の名前には、実際の機能と区別するためにコロンが前置されます。 現在のところ、唯一の機能の束は use feature ":5.10"use feature ":5.10.0" で、どちらも 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".

来たるべき perl バージョン 5.10.X では、use feature ":5.10" は 最新の use feature ":5.10.X" と等価になります。


There are two ways to load the feature pragma implicitly :

feature プラグマを暗黙に読み込むには二つの方法があります:

  • 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.)

    コマンドラインで -e オプションの代わりに -E オプションを使います。 これにより、main コンパイル単位(つまり、1 行野郎)で全ての利用可能な機能が 有効になります。

  • 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.0';

    and so on.


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

    しかし移植性の警告("use" in perlfunc を参照してください)を避けるために、 以下のようにするのを好むかもしれません:

        use 5.010;

    with the same effect.