#----------------------------- |
if ( $string =~ /PATTERN/) { |
# is a number |
} else { |
# is not |
} |
#----------------------------- |
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+))?$/; |
#----------------------------- |
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 ; |
} else { |
return $num ; |
} |
} |
sub is_numeric { defined scalar &getnum } |
#----------------------------- |