Perlベストプラクティス 2

正規表現は常にオプションxmsをつける。

$string =~ m{
    ^.*abc.*$ # abcを含む行
}xms;

ということ。

/x
パターン中の空白文字*1と#から改行までを無視する。半角スペースや#自身をパターンに含めたいときはエスケープするか[]でキャラクタクラスにする。つまり/\ /x, /[ ]/x, /\#/x, /[#]/xとする。
/m
普通は「^」と「$」はそれぞれ文字列の先頭と末尾にマッチするが、/mを指定すると\nで区切られた各行の先頭と末尾にマッチするようになるということ。「複数行として扱う」などとよく書かれているが正直意味がわからない。文字列の先頭は「\A」を、文字列の末尾は「\z」を使う(/mとは関係なく常に使える)。
/s
普通は「.」は改行を除く1文字にマッチするが、/sを指定すると改行(\n=LF)にもマッチするようになる。「単一行として扱う」などとよく書かれているが意味不明だ。

これらはパターン中に(?x), (?m), (?s)と指定することもできる。

*1:\sと同じ。つまり半角スペース、タブ\t、改行\n、復帰\r、改ページ\fが無視される。