use strict; use warnings; my %dispatch = ( one => \&sub1, two => \&sub2, three => \&sub3, ); my $arg = shift @ARGV; if (defined $arg && exists $dispatch{$arg}) { $dispatch{$arg}->(); } else { print "Usage: $0 [-command]\n"; print "Available commands:\n"; print " -$_\n" for sort keys %dispatch; } sub sub1 { print "sub one"; } sub sub2{ print "sub two"; } sub sub3 { print "sub three"; }