省略できる変数

C使いがもっともとまどう変数周り

$_ perlの基本。変数名が省略されたときにデフォルトで使われる変数

これがわからないと本当にわからない。

foreach $key (@list){
    print $key
}

という表現は

foreach (@list){
    print ;
}

と書き換えられる

これは

foreach $_ (@list){
    print $_;
}

の省略表記。

perlでは省略可能な物は省略して書くという文化があり
省略された変数名が$_
本来変数があるべき場所に何もない場合$_が省略表記されていると見なす

特に 初心者がわからないのが以下の省略表記

$valoue =~ m/マッチ用の正規表現/;
$valoue =~ s/置換用の正規表現/置換後の文字列/;

m/マッチ用の正規表現/;
s/置換用の正規表現/置換後の文字列/;

当然後者は

$_ =~ m/マッチ用の正規表現/;
$_ =~ s/置換用の正規表現/置換後の文字列/;

の省略表記。

コレを使うと、リストの中の文字列からすべてのaaaという文字をbbbに置き換えるコードは

foreach (@list){
    s/aaa/bbbb/g
}

という表記になる
略さずに書くと

foreach $_ (@list){
    $_ =~ s/aaa/bbbb/g
}

かなり便利だが知らないと全くわからない

ちなみにs/aaa/bbb/g
先頭のsは置換 aaaは対象の文字列 bbbは置換後の文字列 gがないと文字列にたいして1度だけ適用(最初にマッチした物だけ置換)gがあると文末まで何度も繰り返し置換