m, s のオプション


i マッチングの際,大文字小文字を区別しない。
  m/interesting/i
g マッチする全ての文字列を対象とする。これがないと,マッチングは一度のみ,置換の場合は最初にマッチするものしか置換しない。
  s/internet/Internet/ig
s 文字列を単一行として扱う。途中に [改行] (\n) があっても,その前後は $^ にマッチしない。s を指定すると,. (ピリオド) は \n にマッチするようになる。
  m/\.$/s
m 文字列を複数行として扱う。途中に [改行] があれば,その前後は $^ にマッチする。
  m/\.$/m
x 空白類を無視する。(ただし,文字集合中の空白類と \ によりエスケープされた空白類は有効。) 空白類を無視するので,1行で書くと長くなって見づらいものも,適当に改行やスペースを入れて読みやすくできる。

1行で書くとこんなふうになってしまうものも...

    m/\bchances? ((for (\S+ ){1,5}?)?(not )?to\b|of (\S+ ){0,5}?\S+ing\b|that\b)/

こんなふうに書くことが可能になる。

    m/
       \bchances?\                                   #chance の後に,
       (   (for\ (\S+\ ){1,5}?)? (not\ )? to\b       #不定詞 (for+主語はなくてもよい)
       |    of\  (\S+\ ){0,5}?            \S+ing\b   #または of + 動名詞
       |    that\b                                   #または that 節が
       )                                             #続くもの
    /x

スペースを挿入したり改行したりして,見やすいようにレイアウトしていること,無視してはいけないスペースには \ を付けていること,# を使ってコメントを書き加えている点に注意。

e s 演算子のオプション。置換文字列部分を式として評価して,その値で置き換える。(sprintf → Lesson 3, split → Lesson 6)
    #数字は全て値を1大きいものに置換
    s/\d/$& + 1/eg;
    #\に続く数字の値を1.05倍する
    s/\\(\d+)/'\\' . ($1 * 1.05)/eg;
    #「時:分:秒」の形式の時刻表示の数字を2桁に揃える
    s/\b\d\d?:\d\d?:\d\d?\b/sprintf "%02d:%02d:%02d", split(':', $&)/eg;