Re: status() vs constants
> Now, in my handler sub I want to return the corresponding constant for > whatever > status() is set to. Under mod_perl 1.x this worked by just returning the > status() since OK == 200, SERVER_ERROR == 500, OK is not 200. OK is 0, HTTP_OK is 200. 'tis always been this way :) > etc. But this isn't true under > mod_perl 2 (as far as I can tell). mp1 assumed that if you returned 200 (HTTP_OK) you really meant 0 (OK). this is no longer true with mp1. if you do the right thing (return OK, not HTTP_OK) then both mp1 and mp2 do the right thing. in general, you should never worry about $r->status - whether you're in mp1 or mp2, your handler() subroutine should always return either one of OK, DECLINED, or DONE, or some HTTP _error_ code (like 500, 304, etc). over in httpd land apache will translate your return value into a suitable value of $r->status (which isn't always the same as what you returned, such as when you're in an ErrorDocument it will force $r->status to whatever the original error status was if your ErrorDocument returns 500). HTH --Geoff
Re: status() vs constants
On Sat, 2006-08-12 at 16:46 -0400, Michael Peters wrote: > Now, in my handler sub I want to return the corresponding constant for > whatever > status() is set to. Under mod_perl 1.x this worked by just returning the > status() since OK == 200, SERVER_ERROR == 500, etc. But this isn't true under > mod_perl 2 (as far as I can tell). My module needs to work under both, so I > need > a better way. The HTTP constants all have names like HTTP_OK rather than OK. They are not guaranteed to match the handler return codes, although many of them do. > I'd rather not have to check every possible status() value in a huge if/else > tree to return the right constant You could make a hash that maps handler response codes to HTTP codes. Most people don't need to do that because they only use one or two codes. - Perrin
Re: status() vs constants
That seems to work for me under MP2 My first guess is that it has to do with status renamings... Instead of setting something to 200 / 500 , why not just set it to the name of the status code, then use a Hash to pull out the appropriate code for apache1/apache2? personally i like 'human text' like that, then looking stuff up in a hash of values when you need the integer code. it makes debugging way less painful.