feature-1.20 > feature


feature - Perl pragma to enable new 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, or new semantic meanings to older 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 を参照してください。

'unicode_strings' 機能

use feature 'unicode_strings' tells the compiler to use Unicode semantics in all string operations executed within its scope (unless they are also within the scope of either use locale or use bytes). The same applies to all regular expressions compiled within the scope, even if executed outside it.

use feature 'unicode_strings' は、(use localeuse bytes の スコープないでない限り) そのスコープ内で実行される全ての文字列操作に Unicode の意味論を使うようにコンパイラに伝えます。

no feature 'unicode_strings' tells the compiler to use the traditional Perl semantics wherein the native character set semantics is used unless it is clear to Perl that Unicode is desired. This can lead to some surprises when the behavior suddenly changes. (See "The "Unicode Bug"" in perlunicode for details.) For this reason, if you are potentially using Unicode in your program, the use feature 'unicode_strings' subpragma is strongly recommended.

no feature 'unicode_strings' は、Unicode が求められているのが Perl にとって明らかでない限り、ネイティブな文字集合意味論が使われるところで 伝統的な Perl の意味論を使うようにコンパイラに伝えます。 これは、振る舞いが突然変更されたときに驚きを引き起こすかもしれません。 (詳しくは "The "Unicode Bug"" in perlunicode を参照してください。) この理由により、もしプログラムで Unicode を扱う可能性があるなら、 use feature 'unicode_strings' 副プラグマを 強く 勧めます。

This subpragma is available starting with Perl 5.11.3, but was not fully implemented until 5.13.8.

この副プラグマは Perl 5.11.3 から利用可能になりましたが、 5.13.8 まで完全には実装されていませんでした。


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

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

機能の束での 5.10.00 のような副バージョンを指定しても効果は ありません: 機能の束は全ての副バージョンに関して同じ事が保証されています。


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

    and so on. Note how the trailing sub-version is automatically stripped from the version.

    なるということです。 末尾の副バージョンは自動的にバージョンから取り除かれるようになったことに 注意してください。

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

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

        use 5.010;

    with the same effect.