変数(文字列から解析された値)が数値であるかどうかを判断したいと思います。どうやってやるの?まあ、私は/^[0-9]+$/
は機能しますが、よりエレガントなバージョンはありますか?
if (/\D/) { print "has nondigits\n" }
if (/^\d+$/) { print "is a whole number\n" }
if (/^-?\d+$/) { print "is an integer\n" }
if (/^[+-]?\d+$/) { print "is a +/- integer\n" }
if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
if (/^-?(?:\d+(?:\.\d*)?&\.\d+)$/) { print "is a decimal number\n" }
if (/^([+-]?)(?=\d&\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
{ print "a C float\n" }
ここから取得: http://rosettacode.org/wiki/Determine_if_a_string_is_numeric#Perl
コアからlooks_like_number()
関数を使用できます Scalar :: Util モジュール。
perlfaqの質問も参照してください: スカラーが数値/整数/整数/浮動小数点であるかどうかを判断するにはどうすればよいですか?
正規表現を使用する場合は、使用することをお勧めします:
sub is_int {
$str = $_[0];
#trim whitespace both sides
$str =~ s/^\s+|\s+$//g;
#Alternatively, to match any float-like numeric, use:
# m/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/
#flatten to string and match dash or plus and one or more digits
if ($str =~ /^(\-|\+)?\d+?$/) {
print "yes " . $_[0] . "\n";
}
else{
print "no " . $_[0] . "\n";
}
}
is_int(-12345678901234); #yes
is_int(-1); #yes
is_int(23.); #yes
is_int(-23.); #yes
is_int(0); #yes
is_int(+1); #yes
is_int(12345678901234); #yes
is_int("\t23"); #yes
is_int("23\t"); #yes
is_int("08"); #yes
is_int("-12345678901234"); #yes
is_int("-1"); #yes
is_int("0"); #yes
is_int("+1"); #yes
is_int("123456789012345"); #yes
is_int("-"); #no
is_int("+"); #no
is_int("yadz"); #no
is_int(""); #no
is_int(undef); #no
is_int("- 5"); #no
is_int("+ -5"); #no
is_int("23.1234"); #no
is_int("23."); #no
is_int("--1"); #no
is_int("++1"); #no
is_int(" 23.5 "); #no
is_int(".5"); #no
is_int(",5"); #no
is_int("%5"); #no
is_int("5%"); #no
または、POSIXを使用できます。
use POSIX;
if (isdigit($var)) {
// integer
}