The problem is probably in your conditionals;
$command == 'start' compares
$command and
'start' as numbers,
likely converting them both to zero first then finding them
always equal. You probably meant to use
$command eq 'start', etc.
You may find it useful to switch to a dispatch table instead of
a whole bunch of if statements:
sub handle_start {
my($client,$param) = @_;
print $client "Welcome to the game: $param\n";
}
# ... more commands ...
my %commands = (
start => \&handle_start,
# ... more ...
);
sub handle {
# ...
if (not exsits $commands{$commands}) {
# bad command
} else {
# run command
$commands{$command}->($client,$param);
}
# ...
}
(A side note: split always treats it's first argument
as a regex, even if it is single-quoted like you have it.
As a matter of style, I would advise using /<div>/
or similar so as not to make it look like it doesn't
take a regex...)