use strict; use warnings; use Getopt::Long; my %options; my %dispatch = ( a => \&doA, b => \&doB, c => \&doC, ); GetOptions (\%options, 'a:s', 'b:s', 'c:s'); for my $option (keys %options) { $dispatch{$option}->($options{$option}) if exists $dispatch{$option}; } sub doA { my ($param) = @_; print "Hello world\n"; } sub doB { my ($param) = @_; print "Do da dispatch\n"; } sub doC { my ($param) = @_; print "mu\n"; } #### mu Hello world Do da dispatch