in reply to efficientcy

Well, thank you John. This is the version I gave him for all you people wondering out there.
#!/usr/bin/perl -w use CGI qw(:standard); use strict; #always! my $location = param("place"); print header; my %subs = ( 'home'=>\&home, # Just add a key and then a value then put your 'news'=>\&news, # stuff in a subroutine :) Yay! ); if (!$location){ &home }elsif (defined(my $action = $subs{$location})){# Thanks Chromatic $action->(); } # Q&A -> Subroutines -> How to make subroutine accessible as foo.pl?fo +o # Thanks again :-) ############### # Subroutines # ############### sub home{ print "this is home. I am John, hear me roar"; } sub news{ print "this is news"; }


Wanna be perl hacker.
Dave AKA damian

Replies are listed 'Best First'.
Re: Re: efficiency (Spelled it wrong :-)
by Yohimbe (Pilgrim) on Jan 26, 2001 at 22:24 UTC
    Further to this, if this is a high traffic site, then every bit helps. Under mod_perl, you can get a few more executions per second if you collect all your output and print it with one statement. ie:
    #!/usr/bin/perl -w
    
    package Foo;
    use CGI qw(:standard);
    use strict;  #always!
    
    sub handler {
        my $location = param("place");
        my %subs = (
           'home'=>\&home, # Just add a key and then a value then put your 
           'news'=>\&news, # stuff in a subroutine :) Yay!
        );
        my $output="Constant preamble"; 
        if (!$location){
           $output .= &home;
        }
        elsif (defined(my $action = $subs{$location})){
           # Thanks Chromatic 
           $output .= $action->();                                
        }
        print header,$output;
        return;
    }
    # Q&A -> Subroutines -> How to make subroutine accessible as foo.pl?foo
    # Thanks again :-) 
    
    ###############
    # Subroutines #
    ############### 
    sub home{
           return "this is home. I am John, hear me roar";
    }
    sub news{
           return "this is news";
    }
    
    The effect of the single print statement is to collect your network write(s) into a single one or two if possible. While for a cgi executed once in a while, the utility is limited, it is a dramatic benefit on UF where a given CGI will run literally 30 times a second, so every write to the tcp/ip stack matters, big time.
    --
    Jay "Yohimbe" Thorne, alpha geek for UserFriendly