Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success 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 $ACTIONS = join '|', reverse sort keys %ACTION;
my $MACHINES = join '|', reverse sort keys %MACHINE;
my $machine_command = do{
use re 'eval';
qr{
<Command>
<rule: Command>
<Action> <Machine_name>
<rule: Action>
$ACTIONS
<rule: Machine_name>
$MACHINES
}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";
}
}