Perl Numeric Literal

perlの数値リテラルについて調べたのでまとめておく。

プログラミングPerl

$x = 12345;               # 整数
$x = 12345.67;            # 浮動小数点数
$x = 6.0e23;              # 科学的記法
$x = 4_294_967_296;       # 下線をつかって読みやすくする
$x = 0377;                # 8進数
$x = 0xfff;               # 16進数
$x = 0b1100_0000;         # 2進数

プログラミングPerl - 2.6.1 数値リテラル より

Inf, NaN

$x = 'inf';        # 無限大
$x = '-inf';       # 負の無限大
$x = 'nan';        #

Infinityも認識される。大文字と小文字の区別なし。

Perlで文字列が数値かどうか判定するには

1. 最良の方法?

!( $n == 0 && $n ne "0" )

warningが出る...Argument "String" isn't numeric in numeric eq (==)

2. looks_like_number()

Scalar::Util::looks_like_number()

正規表現にしてみた

my $rx_integer = qr/(?:[0-9_]+)/;
my $rx_decimal = qr/(?:[0-9_]+\.[0-9_]+)/;

my $rx_number = qr{ 
    (?: (?:-)* inf (?:inity)* )
    |
    nan 
    |
    0(?:
        (?:x[0-9a-f_]+)
        |
        (?:b[0-9_]+)
        |
        (?:[0-7_]+)
    )
    |
    (?: $rx_decimal|$rx_integer) e[+|-]? $rx_integer )
    |
    $rx_decimal
    |
    $rx_integer
}xi;


参考:
perldata - Perl のデータ型 - perldoc.jp
looks_like_number() - Perl日記