Eu gostaria de usar comb
a função do Raku com uma regex de uma gramática em vez de uma regex independente. Por exemplo, no código a seguir, que analisa journalctl
logs do stdin, gostaria de substituir &h
in MAIN
por algo como &Journalctl::full_log
:
role Log {
token preamble { ... };
token message { <-preamble>* };
regex full_log { <preamble> <message> };
}
grammar Journalctl does Log {
token date { \S+\s\d\d\s\d\d\:\d\d\:\d\d};
token hostname { \S* };
token ctl_unit { <-[\[]>+ };
token pid { \d+ };
regex preamble { <date> <.ws> <hostname> <.ws> <ctl_unit> \[ <pid> \]\: };
}
sub MAIN( ) {
my regex h { h. };
for $*IN.comb(&h) -> $wof { # FIXME
say $wof;
}
}
Aqui estão alguns exemplos journalctl
de registros para referência:
Jun 25 14:45:54 cpu-hostname systemd-timesyncd[725]: Initial synchronization to time server 185.125.190.56:123 (ntp.ubuntu.com).
Jun 25 14:45:54 cpu-hostname systemd-resolved[722]: Clock change detected. Flushing caches.
Eu sugiro que você tente isso: