IMO、字句から出てくる素晴らしいことの1つ$_は、新しい_プロトタイプシンボルです。
これにより、1つのスカラーを取るように、または何も指定されていない場合は取得するように、サブルーチンを指定できます$_。
したがって、書く代わりに:
sub foo {
my $arg = @_ ? shift : $_;
# Do stuff with $_
}
私は書くことができます:
sub foo(_) {
my $arg = shift;
# Do stuff with $_ or first arg.
}
大きな変更ではありませんが、その動作が必要な場合は、はるかに簡単です。ボイラープレートの取り外しは良いことです。
もちろん、これにはいくつかのビルトイン(例chr)のプロトタイプを変更するというノックオン効果があり、一部のコードが破損する可能性があります。
全体的に、私は字句を歓迎し$_ます。これにより、偶発的なデータの改ざんや関数間の奇妙な相互作用を制限するために使用できるツールが得られます。関数の本体で使用することにし$_た場合、それを字句化することで、$_呼び出すコードがコードの呼び出しで変更されないことを確認できます。
動的スコープは興味深いものですが、ほとんどの場合、字句スコープが必要です。これに周りの合併症を追加し$_ます。単純に行うのはお勧めできません。代わりlocal $_;に使用するのが最善であるという悲惨な警告を聞いたことがあります。for ( $foo ) { }Lexicalized$_は、なんらかの方法でローカライズしたときに、100回のうち99回欲しいものを提供してくれます$_。Lexical$_は、優れた利便性と読みやすさの機能をより堅牢にします。
私の仕事の大部分はperl5.8で動作しなければならなかったので$_、大規模なプロジェクトで字句を使って遊ぶ喜びはありませんでした。しかし、これは安全に利用するのに大いに役立つと感じています$_。これは良いことです。