Perlの謎(その2):『特殊変数 $_』とは
まず、以下のソースを見てください。
use strict; use warnings; while (<DATA>) { if (/^h.*e$/) { print; # hogeを表示する } } __END__ hoge foo
Perl初心者や他言語から来た人が・・・実はかつての自分が、このソースを見た時に???のオンパレードでした。
これを以下のようにすると・・・。
use strict; use warnings; while ($_ = <DATA>) { if ($_ =~ /^h.*e$/) { print $_; # hogeを表示する } } __END__ hoge foo
かなり分かりやすくなりますね。
このように、Perlでは、デフォルトで『$_』という特殊変数を用いるようになっているのです。
そして、『$_』は省略できるのです。
そして、ちょっとベテランになると、省略の方が良くなるのです。
ちなみに、ソースを簡単に解説しときます。
- 『while ($_ = ) {』 は、__END__の下のテキストをデータとして読み込み、すべて読む込むとゼロが返り、ゼロは偽なのでwhileループを抜ける。
- 『if ($_ =~ /^h.*$/) {』 は、$_の中身が、hから始まりeで終わる文字列とマッチした場合に真となる。