#!perl -w use strict; sub hello { print "Hello $_\n" for @_ }; sub bye { print "Goodbye $_\n" for @_ }; my $namespace = \%main::; my ($command,@args) = @ARGV; if (! exists $namespace->{$command}) { warn "Unknown command '$command'. Valid commands are:\n"; for (sort keys %$namespace) { if (defined *{$namespace->{$_}}{CODE}) { warn "$_\n"; }; }; die "$0 stopped.\n"; } else { my $code = $namespace->{$command}; $code->(@args); }; __END__ Q:\>perl -w tmp.pl x Unknown command 'x'. Valid commands are: bye hello tmp.pl stopped. Q:\>perl -w tmp.pl hello Foo Hello Foo Q:\>perl -w tmp.pl bye Foo Goodbye Foo Q:\>