2.1 文字列が有効な数値であるかどうかチェックする

# 正規表現によるマッチング
warn "has nondigits"                 if          /\D/;
warn "not a natural number"   unless /^\d+$/;            # -3は拒否する
warn "not an integer"                unless /^-?\d+$/         # +3は拒否する
warn "not an integer"                unless /^[+-]?\d+$/;
warn "not a decimal number"  unless /^-?\d+\.?\d*$/  # .2は拒否する
warn "not a decimal number"  unless /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
warn "not a C float"                   unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;

# Regexp::Commonを使う方法
use Regexp::Common;
$RE{num}{int};   # 整数にマッチ
$RE{num}{int}{-sep=>',?'};    # 1234567や1,234,567にマッチ
$RE{num}{int}{-sep=>'.'}{-group=>4};  # 1.2345.6789にマッチ
$RE{num}{int}{-base=>8};    # 99にはマッチせず、014(8進数)にマッチ
$RE{num}{int}{-sep=>","}{-group=3};    # 1,234,567にマッチ
$RE{num}{int}{-sep=>',?'}{-group=3};   #1,234や1234にマッチ
$RE{num}{real}   # 123.456や-0.123456にマッチ
$RE{num}{roman}   # xviiやMCMXCVIIIにマッチ
$RE{num}{square}   # 9, 256, 12321にマッチ