c:\@Work\Perl\monks>perl -le
"use strict;
use warnings;
;;
no warnings 'numeric';
print 'numeric warning DISabled';
;;
print q{'abc' }, isNumber('abc');
print q{'123' }, isNumber('123');
print q{123 }, isNumber(123);
;;
sub isNumber
{
@_ or return 0;
my $N = shift;
defined $N or return 0;
my $R = 1;
{
local $SIG{__WARN__} = sub { $R = 0; };
$N = int($N);
}
return $R;
}
"
numeric warning DISabled
'abc' 1
'123' 1
123 1
####
c:\@Work\Perl\monks>perl -le
"use strict;
use warnings;
;;
no warnings 'numeric';
print 'numeric warning DISabled';
;;
print q{'abc' }, isNumber('abc');
print q{'123' }, isNumber('123');
print q{123 }, isNumber(123);
print q{undef }, isNumber(undef);
print q{() }, isNumber();
;;
sub isNumber {
my $numeric = 1;
use warnings 'numeric';
local $SIG{__WARN__} = sub { $numeric = 0; };
my $x = int $_[0];
return $numeric;
}
"
numeric warning DISabled
'abc' 0
'123' 1
123 1
undef 0
() 0
####
c:\@Work\Perl\monks>perl -le
"use warnings;
use strict;
;;
use Test::More 'no_plan';
use Test::NoWarnings;
;;
note qq{perl version $]};
;;
no warnings 'numeric';
note 'numeric warnings DISabled';
;;
note 'should all return 0';
ok isNumber() == 0, q{isNumber() empty argument list};
ok isNumber('') == 0, q{isNumber('') empty string};
ok isNumber('x') == 0, q{isNumber('x'};
ok isNumber('abc') == 0, q{isNumber('abc'};
ok isNumber('x1') == 0, q{isNumber('x1'};
ok isNumber('1x') == 0, q{isNumber('1x'};
note 'should all return 1';
ok isNumber(0) == 1, q{isNumber(0)};
ok isNumber(0.) == 1, q{isNumber(0.)};
ok isNumber(.0) == 1, q{isNumber(.0)};
ok isNumber(0.0) == 1, q{isNumber(0.0)};
ok isNumber(1) == 1, q{isNumber(1)};
ok isNumber(1.) == 1, q{isNumber(1.)};
ok isNumber(.1) == 1, q{isNumber(.1)};
ok isNumber(1.0) == 1, q{isNumber(1.0)};
ok isNumber(0.1) == 1, q{isNumber(0.1)};
ok isNumber(1.1) == 1, q{isNumber(0.1)};
ok isNumber('0') == 1, q{isNumber('0')};
ok isNumber('0.') == 1, q{isNumber('0.')};
ok isNumber('.0') == 1, q{isNumber('.0')};
ok isNumber('0.0') == 1, q{isNumber('0.0')};
ok isNumber('1') == 1, q{isNumber('1')};
ok isNumber('1.') == 1, q{isNumber('1.')};
ok isNumber('.1') == 1, q{isNumber('.1')};
ok isNumber('1.0') == 1, q{isNumber('1.0')};
ok isNumber('0.1') == 1, q{isNumber('0.1')};
ok isNumber('1.1') == 1, q{isNumber('1.1')};
ok isNumber(.0001) == 1, q{isNumber(.0001)};
ok isNumber('.0001') == 1, q{isNumber('.0001')};
ok isNumber(1234.0001) == 1, q{isNumber(1234.0001)};
ok isNumber('1234.0001') == 1, q{isNumber('1234.0001')};
ok isNumber(1234e12) == 1, q{isNumber(1234e12)};
ok isNumber('1234e12') == 1, q{isNumber('1234e12')};
;;
done_testing;
exit;
;;
sub isNumber {
my $numeric = 1;
use warnings 'numeric';
local $SIG{__WARN__} = sub { $numeric = 0; };
my $x = int $_[0];
return $numeric;
}
"
# perl version 5.008009
# numeric warnings DISabled
# should all return 0
ok 1 - isNumber() empty argument list
ok 2 - isNumber('') empty string
ok 3 - isNumber('x'
ok 4 - isNumber('abc'
ok 5 - isNumber('x1'
ok 6 - isNumber('1x'
# should all return 1
ok 7 - isNumber(0)
ok 8 - isNumber(0.)
ok 9 - isNumber(.0)
ok 10 - isNumber(0.0)
ok 11 - isNumber(1)
ok 12 - isNumber(1.)
ok 13 - isNumber(.1)
ok 14 - isNumber(1.0)
ok 15 - isNumber(0.1)
ok 16 - isNumber(0.1)
ok 17 - isNumber('0')
ok 18 - isNumber('0.')
ok 19 - isNumber('.0')
ok 20 - isNumber('0.0')
ok 21 - isNumber('1')
ok 22 - isNumber('1.')
ok 23 - isNumber('.1')
ok 24 - isNumber('1.0')
ok 25 - isNumber('0.1')
ok 26 - isNumber('1.1')
ok 27 - isNumber(.0001)
ok 28 - isNumber('.0001')
ok 29 - isNumber(1234.0001)
ok 30 - isNumber('1234.0001')
ok 31 - isNumber(1234e12)
ok 32 - isNumber('1234e12')
1..32
ok 33 - no warnings
1..33