При условии, что вам не нужно поддерживать необычные вещи (например, научную нотацию), это почти работает (и очень просто):
#!/usr/bin/perl
my $foo = '1234.5';
if( $foo =~ /\d+/ ){
print "$foo is a number\n";
}
Причина, по которой он работает не полностью, заключается в том, что вы можете иметь дефисы и точки в любом месте (столько, сколько пожелаете), если у вас есть хотя бы одна цифра). '--1--2' оценивается как ноль, а '1.2.3.4.5' - как 1.2 (вторая точка и все после игнорируются). Это может или не может быть проблемой для вас.