memo475 : Perlもの

Created Fri May 6 12:29:23 2011
Last Modified Mon May 23 19:25:57 2011

*#1 Fri May 6 12:29:23 2011 / Fri May 6 12:38:52 2011

[もう何回目になるか]

[何回調べても覚えられない小技]
ワンライナー => memo475

[正規表現(Regular Expression:regexp)]
後方参照 => memo460


*#2 Fri May 6 12:30:41 2011 / Fri May 6 12:44:43 2011

[ワンライナー(One Liner)]
無理してワンライナーに押し込めようとして時間を食うくらいならファイルにべた書きした方がいいと思うんだけどねえ・・・


[基本形]
$perl -e '[スクリプト本体]'

ほぼそのまんま。

[行単位での処理]
$perl -ne '[スクリプト本体]'

これは

while(<>){
  [スクリプト本体]
}

になる。
次のような荒業も可能:
perl -ne '++$i;}{ print $i;'

上記は

while(<>){
  ++$i;
}
{
  print $i;
}

と解釈される(整形済)。
print $i は読み込んだファイルの行数を出力することになる。

*#3 Thu May 19 11:49:15 2011 / Thu May 19 12:02:01 2011

[制御構造]

[redo]
C/C++ではブロック扱いの {} は、Perlでは「1回きりの」ループとして扱われるので、
この中で next, last を使うと一気抜けが可能になる。
それでは redo はどうなるのか、と言うと、ブロックの頭に戻る。つまり、

{
  redo;
}

は無限ループになる。

[gotoとラベル]
goto label;

label:{

}

という書き方はアリ。
ただし label以下がサブルーチン定義に見えるからイヤ!という人がいる可能性もある(subついてねえんだから見間違えんなよ、って感じだけど)。

*#4 Mon May 23 19:25:57 2011 / Mon May 23 19:25:57 2011

[変数]

strictが使えない環境下では、変数$Vが未定義でも
$V->{hoge}
とした瞬間に defined $V がtrueになる。

*Linked from: