※正規表現の箇所は、こちらを参考にしました。
Perlは、数値のゼロを数値として認識してくれないので、判定関数を使って判定すると便利です。
sub is_numeric {
# pattern result
# ------------------
# 0 TRUE
# 1 TRUE
# 123 TRUE
# 0.1 TRUE
# 0.123 TRUE
# 12.345 TRUE
# 0123 FALSE
# 1.a FALSE
# 1a FALSE
# 1. FALSE
# hoge FALSE
# "" FALSE
# $undef FALSE
my $v = shift;
my $result = 0;
if (defined $v && $v =~ /^([1-9]\d*|0)(\.[0-9]+)?$/) {
$result = 1;
}
return $result;
}
コメント部分が長くなってすいませんが。。。