Perl: the Markov chain saw PerlMonks

### How do I determine whether a scalar is a number/whole/integer/float?

by faq_monk (Initiate)
 on Oct 08, 1999 at 00:20 UTC Need Help??

Current Perl documentation can be found at perldoc.perl.org.

Here is our local, out-dated (pre-5.6) version:

Assuming that you don't care about IEEE notations like ``NaN'' or ``Infinity'', you probably just want to use a regular expression.

```   warn "has nondigits"        if     /\D/;
warn "not a natural number" unless /^\d+\$/;             # rejects -3
warn "not an integer"       unless /^-?\d+\$/;           # rejects +3
warn "not an integer"       unless /^[+-]?\d+\$/;
warn "not a decimal number" unless /^-?\d+\.?\d*\$/;  # rejects .2
warn "not a decimal number" unless /^-?(?:\d+(?:\.\d*)?|\.\d+)\$/;
warn "not a C float"
unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?\$/;
```

If you're on a POSIX system, Perl's supports the `POSIX::strtod` function. Its semantics are somewhat cumbersome, so here's a `getnum` wrapper function for more convenient access. This function takes a string and returns the number it found, or undef for input that isn't a C float. The `is_numeric` function is a front end to `getnum` if you just want to say, ``Is this a float?''

```    sub getnum {
use POSIX qw(strtod);
my \$str = shift;
\$str =~ s/^\s+//;
\$str =~ s/\s+\$//;
\$! = 0;
my(\$num, \$unparsed) = strtod(\$str);
if ((\$str eq '') || (\$unparsed != 0) || \$!) {
return undef;
} else {
return \$num;
}
}
```

```    sub is_numeric { defined &getnum }
```

Or you could check out http://www.perl.com/CPAN/modules/by-module/String/String-Scanf-1.1.tar.gz instead. The POSIX module (part of the standard Perl distribution) provides the `strtol` and `strtod` for converting strings to double and longs, respectively.

Log In?
 Username: Password:

What's my password?
Create A New User
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2018-04-21 15:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My travels bear the most uncanny semblance to ...

Results (81 votes). Check out past polls.

Notices?