Not bad, especially given the simplicity. More potential false negatives to go with jdporter's.
for my $input (qw< +4 1.0 1e5 12345678901234567890 1.234567890123456789 >) { if( $input+0 eq $input ) { print "$input is a number!\n"; } else { print "$input is not ", 0+$input, "\n"; } } __END__ +4 is not 4 1.0 is not 1 1e5 is not 100000 12345678901234567890 is not 1.23456789012346e+019 1.234567890123456789 is not 1.23456789012346
Update: It successfully detects if $input is (primarily) holding a numeric value (an IV or NV, how Perl stores an integer and floating point, respectively) or is holding a string value that equals the canonical string representation of any possible Perl numeric value.
So I don't believe that there are any false positives. The false negatives are the many ways to reasonably represent a numeric value that aren't Perl's canonical representation.
- tye
In reply to Re^4: How to check Inputs if Numeric (eq 0+)
by tye
in thread How to check Inputs if Numeric
by kasmot
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |