[Dancer-users] more "status code needs to be an integer greater than or equal to 100"

Puneet Kishor punk.kish at gmail.com
Tue Feb 8 04:41:57 CET 2011


Found the solution (see below).

Puneet Kishor wrote:
>
>
> Matthew Vickers wrote:
>> ----- "Puneet Kishor"<punk.kish at gmail.com> wrote:
>>
>>> Completely foxed here. I have code like
>>>
>>> get '/*?' => sub {
>>> ..
>>> debug "foo";
>>> template $template, \%template_opts;
>>> debug "bar";
>>> }
>>>
>>> My development log shows
>>>
>>> [10182] debug @0.051256> [hit #1] foo in
>>> /Users/punkish/Sites/punkish/lib/punkish.pm l. 255
>>> [10182] debug @0.056021> [hit #1] bar in
>>> /Users/punkish/Sites/punkish/lib/punkish.pm l. 257
>>>
>>> However, in my browser I get the dreaded "status code needs to be an
>>> integer greater than or equal to 100 at
>>> /usr/local/lib/perl5/site_perl/5.12.1/Plack/Middleware/StackTrace.pm
>>> line 27"
>>>
>>> Any suggestions?
>>>
>>
>>
>> Is the return value of your route the return value from the debug call ?
>>
>> Try:
>>
>> my $response= template($template, \%template_opts);
>> debug("bar");
>> return $response;
>>
>
>
> Even more bizarre, the following
>
> my $response = template $template, \%template_opts;
> debug "response $response";
> return $response;
>
> dumps the correctly formatted and filled template in the
> development.log, but the browser still gets the error trace with the
> "status code... " error.
>

So, I upgraded from 1.2003 to 1.3003 (didn't even know that existed... 
wish Perl had something like the Mac OS X Sparkle auto-update 
framework). Now I get a much better message, not that cryptic and 
useless "status ... " message.

Turns out, I had code like so

     my $year;

     while (my ($page_year) = $sth->fetchrow_array) {
         if ($year != $page_year) {


and that triggered a

{
    "error" : "Warning caught during route execution: Use of 
uninitialized value $year in numeric ne (!=) at 
/Users/punkish/Sites/punkish/lib/punkish.pm line 559.\n"
}

Well, I changed my $year declaration line to

     my $year = 0;

and it all works. But, this shouldn't really cause a fatal error. Why is 
this kind of error causing the entire application to barf? There is no 
concept of typing in Perl, so why enforce it?

Puneet.



More information about the Dancer-users mailing list