6.6 複数行に対するマッチング

複数行にわたるレコードを読み込んで特定のレコードを抽出する場合、もしくはファイル全体を一度に読み込んで特定の要素を抽出する場合など、複数行にわたる文字列に対してパターンマッチを行いたい場合がある。

/m修飾子、/s修飾子のどちらか一方、または両方使用する。

# 例1. killtags 大雑把にHTMLタグを除去する
undef $/;            # each read is whole file
while (<>) {        # ファイル全体を一度に読み込む
  s/<.*?>//gs;   # 大雑把にタグを除去する
  print;                 # 標準出力に出力する
}
# 例2
$/ = '';                 # パラグラフ読み込みモード
while (<ARGV>) {
  while (/^START(.*?)^END/sm) {     # /sにより、,は複数行にマッチする
                                                              # /mにより、^は行頭にマッチする
    print "chunk $. in $ARGV has <<$1>\n";
  }
}