Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 特殊変数
  3. here

デフォルト変数 $_

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/;
}
  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。