in reply to Re: CRSC
in thread CRSC
I like this idea, but it has the major drawback that a hash dosen't preserve order, and in this case the order of application of those REs is important.
I don't know of any elegant solution to this (I'm using mostly the same method when creating multi-page CGI scripts), so the thing I'm using is a hash of page handlers and an array as the sequence of pages (yes, it's the dreaded wizard-style interface). Pages (== hash keys) that are not found in the sequence array are then either flagged as an error (more stability) or silently appended to the end of the wizard (quick'n'dirty development).
A sample :my @pageorder = ( "welcome", "address", "recipients", "preview", "done +" ); # Routines to create the pages my %pages = ( "welcome" => \&page_welcome, "address" => \&page_address, "recipients" => \&page_recipients, "preview" => \&page_preview, "done" => \&page_done, ); # Routines to validate user input for every page my %validators = ( "welcome" => undef, "address" => \&validate_address, "recipients" => \&validate_recipients, "preview" => undef, "done" => undef, );
And the page handler works like this :
# First, determine where we are, using a default of "welcome" on error + : my $page; if ($cgi->param("go_prev") and $cgi->param("prevpage")) { $page = $cgi->param("prevpage"); } else { $page = $cgi->param("nextpage"); }; if (! exists $pages{$page}) { $page = "welcome"; }; # Parameter validation ommitted, as it's simply a walk of the validati +on chain for every page ... # Execute the special code for this page, so all this searching had so +me sense : &{$pages{$page}};
|
---|
Replies are listed 'Best First'. | |
---|---|
Ordered hashes (Re: CRSC)
by tye (Sage) on Feb 22, 2001 at 21:03 UTC |
In Section
Cool Uses for Perl