データマンジング

Unixのパイプを使って柔軟性を持たせる

perlのプログラムの中ではを使って、起動時に

perl test.pl < test.txt

とかってやるとよい。

ダイヤモンド演算子

perl test.pl < test.txt

と、ダイヤモンド演算子を使ったりしたときの

perl test.pl test.txt

は等価。

ワンライナー(置換)

perl -pe 's/hogehoge/hoge/g' input > output

はそろそろ覚えてきた。

バックアップファイルの取りかた

perl -i.bak -pe 's/hogehoge/hoge/g' input.txt

はinput.txtの情報が書き換えられ、input.txt.bakがバックアップファイル。

ワンライナー(autosplitモード)

  • 「-a」は入力の各行をsplitして@Fに格納
  • ディフォルトではスペースで
  • 「-F':'」とかってやるとセパレータを変更できる

ワンライナー(行末処理)

  • 「-l」オプション
  • 入力行から改行を自動的に削除し、出力には自動で付加

入力コードのセパレータ

  • 「$/」は入力のレコードセパレータとなっている
  • ディフォルトでは改行文字
  • 「$/=undef」とすることで、テキストの一気読みができる
  • 通常「$/」のスコープはグローバルなので、括弧とlocalでスコープを限定にしておくほうがよい
    • localはsaveの役割だから、範囲が終わったら元に戻る

「$.」について

  • 直前に読んだファイルハンドルの現在の行番号となる

Perlの特殊変数を使いこなす

レコードが「%%」のような文字で区切られている場合、

local $/ = "\n%%\n";

とすると「%%」までをひとくぎりとして一度に読み込んでくれる。