6.4 正規表現にコメントを付加する

use Socket;               # inet_addrのロード
s{                        
(                         # $1にホスト名を格納
 (?:                      # グループ化専用の丸括弧
  (?! [-_] )              # アンダーバー、ハイフン以外の文字を探す
  [\w-] +          # ホスト名
  \.                      # ドメインを区切るドット
 ) +                      # これらのパターンを1回以上繰り返す
 [A-Za-z]                 # 次は英語の大文字小文字
 [\w-] +                  # ドメインの末尾
 )                        # ここまでを$1に格納
}{              # 以降の文字列で置換する
    "$1 " .               # 元のドメイン名とスペース
    ( ($addr = gethostbyname($1) )     # アドレスを取得できた場合
      ? "[" . inet_ntoa($addr) . "]"   # フォーマットする
      : "[???]"                        # 不明の場合
      )
}gex;                     # /gでグローバルマッチングを実行
                          # /eで置換部をコードとして実行
                          # /xでコメントの挿入を可能にする

プログラム例2: 数値のマッチング

$option_sign             = '[-+]?';
$mandatory_digits = '\d+';
$decimal_point         = '\.?';
$optional_digits        = '\d*';

$number = $optional_sign
                   . $mandatory_digits
                   . $decimal_point
                   . $optional_digits;

if (/($number)/) {     # マッチする文字列を1つ取得
  $found = $1;
}
@alllnums = /$number/g;  # マッチする全ての文字列を取得
unless (/^$number$/) {       # マッチする文字列が無い場合
  print "need a number, just a number\n";
}