sub AsNumber { my ($s) = @_; return undef unless defined( $s ); my $number; eval { # make conversion failure a fatal error use warnings FATAL => qw(numeric); # try to use $s as a number $number = 0 + $s; }; if ($@) { # exception happened, thus not a number $number = undef; } return $number; } print AsNumber(123), "\n"; print AsNumber("123"), "\n"; print AsNumber("abc"), "\n"; print AsNumber(1.2e-10), "\n"; print AsNumber(1.23), "\n"; print AsNumber("1.2a"), "\n";