in reply to Object::InsideOut field type validation

Note that you used
! defined $val || $val > 0
in one place and
! defined $v or $v > 0
in the other.

Argument "undef" isn't numeric in numeric gt (>)

That's not a Perl message. Perl 5.6 to 5.10 all return

Use of uninitialized value in numeric gt (>)

Update: LOL! As oshalla points out, this is the warning you get for the string 'undef', as opposed to an undefined value.

Replies are listed 'Best First'.
Re^2: Object::InsideOut field type validation
by Bloodnok (Vicar) on Feb 05, 2009 at 19:49 UTC
    TFT ikegami, I knew it would be something simple.

    Having said that, the problem can be removed by including no warnings; in the code ...

    sub validate_max_size { my $val = shift; no warnings; ! defined $val || $val > 0; }
    gets rid of the problem ... or at least allows a different problem to surface in my test harness ;-)

    A user level that continues to overstate my experience :-))

      I don't get it :-( I tried:

      use strict ; use warnings ; try() ; # none: 1 try(undef) ; # undef: 1 try(-1) ; # -1: 0 try(0) ; # 0: 0 try(1) ; # 1: 1 sub try { my ($s) = @_ ; my $r = validate_max_size(@_) ; if (@_ == 0) { $s = "none" ; } elsif (!defined($s)) { $s = "undef" ; } ; printf "%8s: %d\n", $s, $r+0 ; } ; sub validate_max_size { my $val = shift; ! defined $val || $val > 0; }
      on perl 5.10.0, and got no warnings...

      I don't know if there's an ointment for bracket-alergy as extreme as this... I would write:

      !defined($val) || ($val > 0) ;
      'cos I'm comfortable with unaries binding tighter than binaries... but the effect is the same as what you writ.

      Wait a tick... this gives the error you mentioned:

      try('undef') ; # Argument "undef" isn't numeric in numeric gt (>) . +..
      could it be that somebody, somewhere, is mapping undef to 'undef' ?