デフォルト変数 $_
Perlにはデフォルト変数というものが存在します。
$_
デフォルト変数が利用されるいくつかの例を最初に見てみます。
grep関数
grep関数に渡された配列のそれぞれの要素は、デフォルト変数に代入されます。
my @values2 = grep { $_ eq 'cat' } @values1;
「$_」はデフォルト変数であり、@values1のそれぞれの要素が順番に代入されます。
これは、英語の代名詞「it」を表現していると考えるとわかりやすいです。
map関数
map関数に渡された配列のそれぞれの要素は、デフォルト変数に代入されます。
my @values2 = map { lc $_ } @values1;
forでレキシカル変数の宣言が省略された場合
forでレキシカル変数の宣言が省略された場合は、配列のそれぞれの要素がデフォルト変数に代入されます。
for (@values) { print "$_\n"; }
後置のfor
後置のforを使った場合、配列のそれぞれの要素は、デフォルト変数に代入されます。
print "$_\n" for @values;
while文でダイヤモンド演算子を単独で使用した場合
while文でダイヤモンド演算子を単独で使用した場合は、各行がデフォルト引数に順番に代入されます。
while (<>) { print "$_\n"; }
この上記の利用方法が、頻繁に目にするデフォルト変数の利用方法です。
標準関数における暗黙の引数
Perlの標準関数には、引数を省略すると、暗黙の引数として、デフォルト変数を使用するものがあります。
これは、自分で記述するときは、可読性が下がるので避けたほうがよい書き方です。
たとえばlc関数で引数を省略した場合は、デフォルト変数が暗黙の引数になります。
my @values2 = map { lc } @values1;
これは、明示的にデフォルト引数を書いたときと同じ意味になります。
my @values2 = map { lc $_ } @values1;
標準関数で引数が省略されていた場合は、暗黙の引数が利用されているのではないかと疑ってみましょう。
正規表現における暗黙のターゲット
正規表現のパターンマッチ演算子の左辺が省略された場合は、デフォルト変数が使用されます。
for (@values) { s/cat/dog/; }
これはデフォルト変数を明示的に書いた場合と同じ意味になります。
for (@values) { $_ =~ s/cat/dog/; }