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;
これでも同じ効果が得られます。