# Solution: Number

examples/regex-perl/is_number.pl
```#!/usr/bin/perl
use strict;
use warnings;

while (my \$number = <STDIN>) {
if (is_non_negative(\$number)) {
print "non negative integer without +- sign\n";   # 0, 3, 7
}
if (is_integer(\$number)) {
print "integer with optional +- sign\n";    # -1, +3
}
if (is_real(\$number)) {
print "real number with decimal point\n";   # 3.1, 0.0,  .3,  2., -.7
}
if (is_exp(\$number)) {
print "exponential format\n";               # .1e
}
if (is_exp2(\$number)) {
print "exponential format (x)\n";           # .1e
}
}
sub is_non_negative { \$_[0] =~ /^\d+\$/ }
sub is_integer      { \$_[0] =~ /^[+-]?\d+\$/ }
sub is_real         { \$_[0] =~ /\d/ and \$_[0] =~ /^[+-]?\d*\.?\d*\$/}
sub is_exp          { \$_[0] =~ /\d/ and \$_[0] =~ /^[+-]?\d*\.?\d*(e[+-]?\d+)?\$/}
sub is_exp2         { \$_[0] =~ /\d/ and \$_[0] =~ /^
[+-]?            # optional + or - sign
\d*              # 0 or more digits before the decimal point
\.?              # optional decimal point
\d*              # 0 or more digits after the decimal point
(e[+-]?\d+)?     # optional "e" followed by an integer number
\$/x}

```