How To Tell A Number From A String

Often, I need to compare two variables but I don’t know if they are numbers or strings. I need to know the type so I can pick the proper comparison operators, i.e., == or eq, > or gt.
So, here’s how to do it:


~$x ne ~"$x" ? 'numeric' : 'string'

~ is the bitwise negation operator (see perlop). It does not negate integers and strings in the same way.

Examples:


$ perl -e 'print ~1, "n"'
4294967294
$ perl -e 'print ~"1", "n"'
Œ

(character which ASCII code is 255 – ord(‘1’))

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.