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
既に存在しているプログラムを壊すことなく、Perl に新しい文法を追加することは、 普通は不可能です。 このプラグマは、リスクを最小化する方法を提供します。 新しい文法構造は use feature 'foo'
で有効化され、適切な feature プラグマが スコープ内にある場合にのみパースされます。
(例えば use strict
のような) その他のプラグマと同様、feature は レキシカルな効果を持ちます。 use feature qw(foo)
は、この地点からブロックの終わりまでの間だけ、 "foo" 機能を利用可能にします。
{
use feature 'say';
say "say is available here";
}
print "But not here.\n";
no feature
機能は 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
と、機能を指定せずに使うと、全ての機能が無効になります。
use feature 'switch'
は、コンパイラに Perl 6 given/when 構文を 有効にするように伝えます。
詳しくは "Switch statements" in perlsyn を参照してください。
use feature 'say'
は、コンパイラに Perl 6 say
関数を有効にするように 伝えます。
詳しくは "say" in perlfunc を参照してください。
use feature 'state'
は、コンパイラに state
変数を有効にするように 伝えます。
詳しくは "Persistent Private Variables" in perlsub を参照してください。
大量の機能全体を 1 回で読み込むためには、機能の束 (feature bundle) が 使えます。 機能の束の名前には、実際の機能と区別するためにコロンが前置されます。 現在のところ、唯一の機能の束は use feature ":5.10"
と use feature ":5.10.0"
で、どちらも use feature qw(switch say state)
と 等価です。
来たるべき perl バージョン 5.10.X では、use feature ":5.10"
は 最新の use feature ":5.10.X"
と等価になります。
feature
プラグマを暗黙に読み込むには二つの方法があります:
コマンドラインで -e
オプションの代わりに -E
オプションを使います。 これにより、main コンパイル単位(つまり、1 行野郎)で全ての利用可能な機能が 有効になります。
つまり、以下のようにすると:
use 5.10.0;
暗黙のうちに以下のように:
use feature ':5.10.0';
なるということです。
しかし移植性の警告("use" in perlfunc を参照してください)を避けるために、 以下のようにするのを好むかもしれません:
use 5.010;
これでも同じ効果が得られます。