stas 02/04/27 11:32:39 Modified: src/docs/1.0/guide Changes.pod porting.pod Log: new section "Preventing Apache::Constants Stringification" Submitted by: Per Einar Ellefsen <[EMAIL PROTECTED]> Revision Changes Path 1.15 +3 -0 modperl-docs/src/docs/1.0/guide/Changes.pod Index: Changes.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/Changes.pod,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- Changes.pod 21 Apr 2002 05:00:09 -0000 1.14 +++ Changes.pod 27 Apr 2002 18:32:39 -0000 1.15 @@ -17,6 +17,9 @@ * guide::porting + o add a new section "Preventing Apache::Constants Stringification" + [Per Einar] + o add a new section presenting a hackish solution for libraries collision, via do() or %INC mangling. 1.9 +51 -0 modperl-docs/src/docs/1.0/guide/porting.pod Index: porting.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/porting.pod,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- porting.pod 17 Apr 2002 04:38:52 -0000 1.8 +++ porting.pod 27 Apr 2002 18:32:39 -0000 1.9 @@ -3157,6 +3157,57 @@ =back +=head1 Preventing Apache::Constants Stringification + +In mod_perl, you are going to use a certain number of constants in +your code, mainly exported from C<Apache::Constants>. However, in some +cases, Perl will not understand that the constant you're trying to +call is really a constant, but interprets it as a string. This is the +case with the hash notation C<=E<gt>>, which automatically stringifies +the key. + +For example: + + $r->custom_response(FORBIDDEN => "File size exceeds quota."); + +This will not set a custom response for C<FORBIDDEN>, but for the +string C<"FORBIDDEN">, which clearly isn't what is expected. You'll +get an error like this: + + [Tue Apr 23 19:46:14 2002] null: Argument "FORBIDDEN" isn't numeric + in subroutine entry at ... + +Therefore, you can avoid this by not using the hash notation for +things that don't require it. + + $r->custom_response(FORBIDDEN, "File size exceeds quota."); + +There are other workarounds, which you should avoid using unless you +really have to use hash notation: + + my %hash = ( + FORBIDDEN() => 'this is forbidden', + +AUTH_REQUIRED => "You aren't authorized to enter!", + ); + +Another important note is that you should be using the correct +constants defined here, and not direct HTTP codes. For example: + + sub handler { + return 200; + } + +Is not correct. The correct use is: + + use Apache::Constants qw(OK); + + sub handler { + return OK; + } + +Also remember that C<OK != HTTP_OK>. + + =head1 Transitioning from Apache::Registry to Apache handlers Even if you are a CGI script die-hard at some point you might want to
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]