our
$VERSION
=
'1.302209'
;
sub
init {
my
$self
=
shift
;
my
$input
=
$self
->{+INPUT};
confess
"input must be defined for 'Number' check"
unless
defined
$input
;
confess
"input must be a number for 'Number' check"
unless
length
(
$input
) &&
$input
=~ m/\S/;
defined
$self
->{+MODE} or
$self
->{+MODE} =
'=='
;
$self
->SUPER::init(
@_
);
}
sub
name {
my
$self
=
shift
;
my
$in
=
$self
->{+INPUT};
return
$in
;
}
my
%NEGATED
= (
'=='
=>
'!='
,
'!='
=>
'=='
,
'<'
=>
'>='
,
'<='
=>
'>'
,
'>='
=>
'<'
,
'>'
=>
'<='
,
);
sub
operator {
my
$self
=
shift
;
return
''
unless
@_
;
my
(
$got
) =
@_
;
return
''
unless
defined
(
$got
);
return
''
unless
length
(
$got
) &&
$got
=~ m/\S/;
return
$NEGATED
{
$self
->{+MODE} }
if
$self
->{+NEGATE};
return
$self
->{+MODE};
}
sub
verify {
my
$self
=
shift
;
my
%params
=
@_
;
my
(
$got
,
$exists
) =
@params
{
qw/got exists/
};
return
0
unless
$exists
;
return
0
unless
defined
$got
;
return
0
if
ref
$got
;
return
0
unless
length
(
$got
) &&
$got
=~ m/\S/;
my
$want
=
$self
->{+INPUT};
my
$mode
=
$self
->{+MODE};
my
$negate
=
$self
->{+NEGATE};
my
@warnings
;
my
$out
;
{
local
$SIG
{__WARN__} =
sub
{
push
@warnings
=>
@_
};
$out
=
$mode
eq
'=='
? (
$got
==
$want
) :
$mode
eq
'!='
? (
$got
!=
$want
) :
$mode
eq
'<'
? (
$got
<
$want
) :
$mode
eq
'<='
? (
$got
<=
$want
) :
$mode
eq
'>='
? (
$got
>=
$want
) :
$mode
eq
'>'
? (
$got
>
$want
) :
die
"Unrecognised MODE"
;
$out
^= 1
if
$negate
;
}
for
my
$warn
(
@warnings
) {
if
(
$warn
=~ m/numeric/) {
$out
= 0;
next
;
}
warn
$warn
;
}
return
$out
;
}
1;