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"; }