Scalar::Util's looks_like_number seems to be the commonly suggested way to determine whether a string is a number.
Why does it consider the string "0 but true" to be a number ?
use Scalar::Util 'looks_like_number';
print looks_like_number("0 but true"); # 1