#!/usr/bin/env perl use strict; use warnings; use Getopt::Long; use Data::Dump; my $action = shift; my %options; my %actions = ( nose => \&nose, cuke => \&cuke ); $actions{$action}->(); dd \%options; sub nose { GetOptions( \%options, "foo=s" ) } sub cuke { GetOptions( \%options, "bar=s" ) }