Using Patterns to Match Numeric Values
Problem
You need to make sure a string looks like a number.
Solution
Use a pattern that matches the type of number you’re looking for.
Discussion
Patterns can be used to classify values into several types of numbers:
|
Pattern |
Type of value the pattern matches |
|---|---|
/^\d+$/ |
Unsigned integer |
/^-?\d+$/ |
Negative or unsigned integer |
/^[-+]?\d+$/ |
Signed or unsigned integer |
/^[-+]?(\d+(\.\d*)?|\.\d+)$/ |
Floating-point number |
The pattern /^\d+$/ matches unsigned integers by
requiring a nonempty value that consists only of digits from the
beginning to the end of the value. If you care only that a value
begins with an integer, you can match an initial numeric part and
extract it. To do this, match just the initial part of the string
(omit the $ that requires the pattern to match to
the end of the string) and place parentheses around the
\d+ part. Then refer to the matched number as
$1 after a successful match:
if ($val =~ /^(\d+)/)
{
$val = $1; # reset value to matched subpart
}You could also add zero to the value, which causes Perl to perform an implicit string-to-number conversion that discards the non-numeric suffix:
if ($val =~ /^\d+/)
{
$val += 0;
}However, if you run Perl with the -w option (which I
recommend), this form of conversion generates warnings for values
that actually have a non-numeric part. It will also convert string
values like 0013 to the number
13, which may be unacceptable in some contexts.
Some kinds of numeric values have a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access