燈明ブログ

現状は小池啓仁の応援ブログ

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で終わる文字列とマッチした場合に真となる。