sub is_numeric { local $_=shift; return if not defined $_; } #### use Scalar::Util 'looks_like_number'; sub is_numeric { local $_=shift; if (!ref $_) { return looks_like_number($_); } } #### use Scalar::Util 'looks_like_number', 'blessed'; sub is_numeric { local $_=shift; if (!ref $_) { return looks_like_number($_); } if (!blessed $_) { return; } } #### use Scalar::Util 'looks_like_number', 'blessed'; require overload; sub is_numeric { local $_=shift; if (!ref $_) { return looks_like_number($_); } if (!blessed $_) { return; } if (!overload::Overloaded $_) { return; } } #### use Scalar::Util 'looks_like_number', 'blessed'; require overload; sub is_numeric { local $_=shift; if (!defined $_) { return; } if (!ref $_) { return looks_like_number($_); } if (!blessed $_) { return; } if (!overload::Overloaded $_) { return; } if ($_->can('is_numeric')) { return $_->is_numeric; } # or just return; if it should be false per default return 1; }