great explanation. Makes perfect sense now. Many thanks.

On Mar 18, 2012, at 9:52 AM, Daniel Perrett <dperrett@cambridge.org> wrote:

This is what looks like is happening:

$h is the empty string. $nodata_valu is a very big number.

($h == $nodata_valu) generates a warning because $h is not a number, it is the empty string. It also is false, so the 'else' is executed.

The sprintf statement coerces $h to a number then converts that number to a string with 2 decimal places.

The value of the sprintf is assigned to $h.

The debug line then prints the two scalars.

Daniel

-----dancer-users-bounces@perldancer.org wrote: -----
To: dancer-users <dancer-users@perldancer.org>
From: "Mr. Puneet Kishor"
Sent by: dancer-users-bounces@perldancer.org
Date: 03/18/2012 02:54AM
Subject: [Dancer-users] befuddling Dancer error

I have the following code

    if (defined $h) {
        $h = ($h == $nodata_valu) ? $nodata_desc : sprintf("%.2f", $h);
        debug "h: $h, nodata: $nodata_valu";
    }

which results in the following log entry

    [63130] debug @0.154003> [hit #4]h: 0.00, nodata: -3.40282346638529e+38

Yet,I get the following Dancer error

    Warning caught during route execution: Argument "" isn't numeric in numeric eq (==) at  
        if (defined $h) {
            $h = ($h == $nodata_valu) ? $nodata_desc : sprintf("%.2f", $h);
            debug "h: $h, nodata: $nodata_valu";
        }


what gives?



--
Puneet Kishor
_______________________________________________
Dancer-users mailing list
Dancer-users@perldancer.org
http://www.backup-manager.org/cgi-bin/listinfo/dancer-users