The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use v5.10;
my %ACTION = (
start => sub{ say "starting @_"; },
stop => sub{ say "stopping @_"; },
restart => sub{ say "restarting @_"; },
connect => sub{ say "connecting @_"; },
disconnect => sub{ say "disconnecting @_"; },
reconnect => sub{ say "reconnecting @_"; },
login => sub{ say "login to @_"; },
logout => sub{ say "logout from @_"; },
logoutall => sub{ say "logoutall on @_"; },
ping => sub{ say "pinging @_"; },
stat => sub{ say "stat'ing @_"; },
status => sub{ say "status of @_"; },
);
my %MACHINE = qw<
>;
my $machine_command = do{
qr{
<Command>
<rule: Command>
<Action> <Machine_name>
<rule: Action>
start | stop | restart
| connect | disconnect | reconnect
| login | logout | logoutall
| ping | status | stat
<rule: Machine_name>
leibnitz
| descartes
| newton
| heidegger
| pascal
}xms
};
while (my $input = prompt) {
if ($input =~ $machine_command) {
my $handler = $ACTION{ $/{Command}{Action} };
my $device = $MACHINE{ $/{Command}{Machine_name} };
$handler->($device);
}
else {
say "Don't know how to $input";
}
}