File: demo_hash_lookup_hardcoded.pl

package info (click to toggle)
libregexp-grammars-perl 1.058-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,328 kB
  • sloc: perl: 53,328; makefile: 2
file content (73 lines) | stat: -rw-r--r-- 1,783 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use v5.10;
use warnings;


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<

    leibnitz         ssh://vax011.example.com
    descartes        ssh://filesys.example.com
    newton           afp://macserver.example.org
    heidegger        ssh://nexus.example.com
    pascal           afp://macpro88.example.org:8088
    them             ssh://remote.example.com
    us               ssh://local.example.com

>;


my $machine_command = do{
    use Regexp::Grammars;
    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
};


use IO::Prompter;

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";
    }
}