Steve Veltman has asked for the wisdom of the Perl Monks concerning the following question:

I want to determine if a single character is numeric or not. Is there a function in Perl that returns (data type?), or is there a suite of other functionalities that I must use? I haven't been able to find any references to this in FAQ or the web. Thanks.
  • Comment on Determine if character is numeric or text

Replies are listed 'Best First'.
Re: Determine if character is numeric or text
by archon (Monk) on Mar 11, 2001 at 04:02 UTC
    Data in perl is determined more by how you use it than what it contains. The term 'numeric' is kind of overloaded. The perlfaq4 page answers the question "How do I determine whether a scalar is a number/whole/integer/float?"

    The character "a" can be used numerically, i.e. if ("a" == 0). What you probably want, though is the regex already mentioned.

Re: Determine if character is numeric or text
by Tuna (Friar) on Mar 11, 2001 at 04:02 UTC
    Well, the general answer to your question is: regular expresion. Below is an example of your question/answer:
    #!/usr/bin/perl -w use strict; my @test_strings = ("One flew over the cuckoo's nest", "1 flew over th +e cuckoo's nest"); foreach my $match_string (@test_strings) { if ($match_string =~ /\d+/) { print "My matching string is\: $match_string\n"; } }

    If you run this, it will print:

    "My matching string is: 1 flew over the cuckoo's nest",

    because the regular expression /\d+/ matched the "1" in that string. Notice, that it completely ignored "One flew over the cuckoo's nest", because it did not match our regular expression.
    \d means digit character, while "+" means one, or more.

    For more on regexen, see this, or this, do a Super Search on regular expressions, or, if on a *nix machine, type perldoc perlre.

    HTH,
    Steve
Re: Determine if character is numeric or text
by jplindstrom (Monsignor) on Mar 11, 2001 at 03:43 UTC
    A simple regexp should do nicely.

    #print "numeric" if $val is one character and it's a digit my $val = "3"; print "numeric\n" if($val =~ m/^\d$/);

    /J

Re: Determine if character is numeric or text
by Steve Veltman (Initiate) on Mar 11, 2001 at 05:42 UTC
    Thank you all for your help! (I feel like David Wilcox in this 'town')