Hey Cory -- > My Hero. This new method is great!
Hehe... I'm glad you like it. I apologize for replying on-list, but having just released 2.3, I'm about to suggest something which may very well necessitate a 2.4 release tonight, before anything important is built on top of 2.3. The cgiapp_prerun() provides an important hook, but it is still a bit limited. One thing it does not yet do is provide a facility through which you can modify the run-mode. After I made the release, it occurred to me that changing the run-mode based on some other logic would be useful. That might allow you to put a dynamic switch in-line which is triggered based on some other logic. For instance (to modify my earlier example): sub cgiapp_prerun { my $self = shift; my $run_mode = shift; unless ($self->is_user_allowed($run_mode)) { return "show_login_form"; } return $run_mode; } This is a pretty different interface from the cgiapp_prerun() in 2.3. I'm a bit nervous about using return values because failure to return the run-mode would totally break the app. (Maybe that's OK?) This raises the bar a bit for anyone who would like to use cgiapp_prerun() for adding a behavior which would NOT change the run-mode. (Now, they HAVE to return the run-mode, or else!) Two other possible interfaces are using a special param, 'CGIAPP_RUNMODE', or using a scalar-ref. The param interface might look like this: sub cgiapp_prerun { my $self = shift; my $run_mode = shift; unless ($self->is_user_allowed($run_mode)) { $self->param("CGIAPP_RUNMODE" => "show_login_form"); } } The problem here is that this "special param" would only have an effect if changed in the cgiapp_prerun() method. While you *could* change it anywhere, only in cgiapp_prerun() will it actually change what run-mode is called. Kind of deceptive and confusing. The scalar-ref interface might look like this: sub cgiapp_prerun { my $self = shift; my $ref_run_mode = shift; unless ($self->is_user_allowed($$ref_run_mode)) { $$ref_run_mode = "show_login_form"; } } The upside of this is that it doesn't put the onus on every developer to return a run-mode even if they are not changing it. The problem is two-fold: First, the current interface already is documented as passing in a scalar -- not a scalar-ref. (Since the release was just made today, this is probably not a big deal since no code was yet written to use a scalar.) The second problem is that scalar-refs, like all refs, are thorny to work with. Most Perl programmers are uncomfortable with this type of "C-style" interface. So, it's decision time! First off: Is being able to change the run-mode as important as I suspect it is? If not, no further changes are required. If changing the run-mode is important (as I suspect it is), than what interface suits the list members best? We have three options: 1. Return run-mode value 2. Set special param, 'CGIAPP_RUNMODE' 3. Modify scalar-ref I'm inclined to use the return-value method, but what do y'all think? TTYL, -Jesse- Jesse Erlbaum, CTO Vanguard Media http://www.vm.com 212.242.5317 x115 [EMAIL PROTECTED] --------------------------------------------------------------------- Web Archive: http://www.mail-archive.com/cgiapp@lists.vm.com/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]