入力で使うファイルは以下
$ cat test.html <p>test <table> <tr><th>and</th><th>0</th><th>1</th></tr> <tr><th>0</th><td>0</td><td>0</td></tr> <tr><th>1</th><td>0</td><td>1</td></tr> </table> </p>
置換を行って-0777のある場合と無い場合で比較するとわかりやすい。tdをthに置換することを考える。最初に一括読み込みの例。-eの内容は一回だけ実行されるので、一つ目のtdだけがthになっている。
$ perl -0777 -pe "s|<td>|<th>|" test.html <p>test <table> <tr><th>and</th><th>0</th><th>1</th></tr> <tr><th>0</th><th>0</td><td>0</td></tr> <tr><th>1</th><td>0</td><td>1</td></tr> </table> </p>
行指向で読み込む例。-eの内容は行数と同じ回数実行されるので各行の1つ目のtdがthに変換されていることがわかる。
$ perl -pe "s|<td>|<th>|" test.html <p>test <table> <tr><th>and</th><th>0</th><th>1</th></tr> <tr><th>0</th><th>0</td><td>0</td></tr> <tr><th>1</th><th>0</td><td>1</td></tr> </table> </p>
行指向ではなくブロック指向にデータを扱う良い例は、tableブロックを削除するだ。以下のようにして削除できる。置換はs///sのようにし(置換演算子sにsオプションを加え)、.を改行にマッチするようにした。
$ perl -0777 -pe "s|<table>(.*?)</table>||s" test.html <p>test </p>
-0777を削除すると以下のようになる。行指向でデータを取り扱ってしまうと、期待通りには動かない。
$ perl -pe "s|<table>(.*?)</table>||s" test.html <p>test <table> <tr><th>and</th><th>0</th><th>1</th></tr> <tr><th>0</th><td>0</td><td>0</td></tr> <tr><th>1</th><td>0</td><td>1</td></tr> </table> </p>