Well, your typing way too much. Lots of redundant punctuation, cut+paste blocks of nearly identical code. Your sample code can be reduced to this without trading clarity for brevity. Though maybe you are a quick typist and see verbocity eq clarity.
sub init_commands { # Fill %Commands hash for parsecommands my @keys = qw/pattern function syntax/; # %Commands{commandname}{@keys} = ( 'pattern', ['modulename', [['name', number of arguments]], 'syntax' ); @Commands{log}{@keys}= ('^log (.*)$', ['', ['createlog', 1]], 'log <filename> <new/append>' ); @Commands{modules saveall}{@keys} = ( '^modules saveall$', ['', ['savemodules', 0]], 'modules saveall' ); @Commands{modules loadall}{@keys} = ( '^modules loadall ([\w\.]+)$', ['', ['loadmodules', 1]], 'modules loadall <filename>' ); ... and so on.. } while( my ($command, $params) = each %Commands) { #debug("parselocalcommand: Command: $command\n"); if( $data =~ /^$command/ ) { if(my @res = $data =~ $params->{pattern} ) { if($#+ == $params->{function}[1][1]) { my $answer = $params->{function}[0] ? modulemethod( $params->{'function'}[0], $params->{'function'}[1][0], @res ) : $params->{function}[1][0]->(@res); printandprompt($answer) if $answer ; } } else { printandprompt("Syntax: #" . $params->{syntax} . "\n"); } } }
In reply to Re: Complex dispatch table
by Anonymous Monk
in thread Complex dispatch table
by castaway
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |