Scalar::Util
looks_like_number
представляется обычно рекомендуемым способом определения, является ли строка числом.
Почему он считает строку "0 but true"
числом?
use Scalar::Util 'looks_like_number';
print looks_like_number("0 but true"); # 1