[Omaha.pm] bad perl - need help - dispatch table

Miller, Scott L (Omaha Networks) scott.l.miller at hp.com
Thu Aug 26 10:37:30 CDT 2004


Terry,

As Mike & Jay said in their posts, the get options packages 
are great.  Although this is a bit beyond what you're asking for, 
I have a standard routine to allow the short options (single
character options) and object files to be intermingled:

	###############################################
	#allow options to be intermixed with filenames
	###############################################
	   while(@ARGV) {
	      #if it doesn't start with a '-', assume it's not an cmd line option
	      while($ARGV[0] =~ /^[^\-]/) { 
	         push @hold, shift @ARGV;
	      }  
	      getopts('<place-expected-option-characters-here>');
	   }     
	   @ARGV=@hold; 

And I've got a largish program that calls a routine whose name
we have in a variable, I have this little routine to help do some 
error checking:

	#######################################################################
	# Call the appropriate handling routine base on the box type given.
	#
	# Ok, I was (and still am) lazy and used dashes in "box-type" strings,
	# which are (or should be) specified within the ip-2-name.tbl file.
	# These files were all setup before I thought "Why don't I just name
	# the subroutines the same thing, and call those routines indirectly?"
	#
	# Dashes are not legal characters for any variable/subroutine name
	# because the parser would get confused because it thinks dashes are 
	# instructions to subtract. 
	#
	# I also need to check for the case where we don't know what kind
	# of box a particular message is from. And the case where the routine 
	# isn't defined. In these cases we call a default routine.
	#  
	#######################################################################
	sub call_sub {
	   my $sub = @_[0];
	      
	   # translate upper case to lower, and more importantly, dashes to
	   # underscores
	   $sub =~ tr/A-Z\-/a-z_/;
	      
	   if ($sub eq "") {
	      &unknown_box;
	   } else {
	      if( defined &$sub ) {
	         &$sub;
	      } else {
	         print "no <$sub> subroutine defined - using unknown_box routine\n";
	         &unknown_box;
	      }
	   }
	}

	#greatly simplified program starts here
	while(<>) {
		$type = &get_box_type($_);
		&call_sub( $type );  #call the appropriate box-type handling subroutine
	}

-Scott





More information about the Omaha-pm mailing list