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の書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!