1 | #! perl |
1 | #! perl |
2 | |
2 | |
3 | # generic perl code evaluator |
3 | # generic perl code evaluator |
4 | |
4 | |
5 | sub eval_event { |
5 | sub eval_event { |
6 | my ($event, $args, @args) = @_; |
6 | my ($event, %vars) = @_; |
7 | |
7 | |
8 | my $code = $event->message; |
8 | my $code = $event->message; |
9 | my $who = eval { $event->environment->name } || "<unknown>"; |
9 | my $who = eval { $event->environment->name } || "<unknown>"; |
10 | |
10 | |
11 | my $rv = eval "my ($args) = \@args;\n" |
11 | my $rv = cf::safe_eval $code, %vars; |
12 | . "#line 1 \"$who\"\n" |
|
|
13 | . $code; |
|
|
14 | |
12 | |
15 | warn $@ if $@; |
13 | warn $@ if $@; |
16 | |
14 | |
17 | $rv |
15 | $rv |
18 | } |
16 | } |
19 | |
17 | |
20 | # currently say only |
|
|
21 | sub on_say { |
18 | sub on_say { |
22 | my ($event, $ob, $who, $msg) = @_; |
19 | my ($event, $ob, $who, $msg) = @_; |
23 | |
20 | |
24 | local $_ = $msg; |
21 | local $_ = $msg; |
25 | |
22 | |
26 | eval_event $event, '$ob, $who, $msg', $ob, $who, $msg |
23 | eval_event $event, ob => $ob, who => $who, msg => $msg |
27 | } |
24 | } |
|
|
25 | |
|
|
26 | sub on_apply { |
|
|
27 | my ($event, $ob, $who) = @_; |
|
|
28 | |
|
|
29 | eval_event $event, ob => $ob, who => $who |
|
|
30 | } |