省略できる変数
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があると文末まで何度も繰り返し置換