#!/usr/bin/perl use strict; use warnings; use Getopt::Long; my %options = (); GetOptions ( "a=s" => \$options{'a'}, "b=s" => \$options{'b'}, "z!" => \$options{'z'}, ); my %Subs = ( 'a' => \&do_a, 'b' => \&do_b, 'z' => \&do_z, ); while (my ($sub_name, $function) = each %Subs){ $function->($options{$sub_name}); } sub do_a { my $active = shift; return unless $active; my $param1 = $active; # my $param2 = shift @ARGV; # print "$param1, $param2, \n"; } sub do_b { my $active = shift; return unless $active; my $param1 = $active; # my $param2 = shift @ARGV; # print "$param1, $param2, \n"; } sub do_z { my $active = shift; return unless $active; #do stuff without parameters }