sub bot_command { my $command = shift(@_); join_channel($command) if ($command =~ /join/); part_channel($command) if ($command =~ /part/); msg_user($command) if ($command =~ /msg/); .... default($command); } #### sub bot_command { local $_ = shift; /join/ ? &join_channel : /part/ ? &part_channel : /msg/ ? &msg_user : &default } #### sub join_channel { ... } sub part_channel { ... } sub msg_user { ... } my %dispatch = ( join => \&join_channel, part => \&part_channel, msg => \&msg_user, ); sub bot_command { my $cmd = shift; $dispatch{$cmd} ? &{$dispatch{$cmd}} : &default }