while(<>){
if(/EXPR/){
# 処理
}
}
とさっと書けて便利です。
便利すぎて他の言語に移行できません。
これをlimboでやろうとすると、以下のように大量の記述が必要となります。
モジュールのロードが面倒。
implement filter1;
include "sys.m";
sys: Sys;
include "draw.m";
include "bufio.m";
bufio: Bufio;
Iobuf: import bufio;
iobuf: ref Iobuf;
include "regex.m";
filter1: module {
init: fn(ctxt: ref Draw->Context, artv: list of string);
};
init(ctxt: ref Draw->Context, artv: list of string)
{
sys = load Sys Sys->PATH;
bufio = load Bufio Bufio->PATH;
if (bufio == nil) {
exit;
}
stdin := sys->fildes(0);
iobuf = bufio->fopen(stdin, bufio->OREAD);
if (iobuf == nil) {
exit;
}
regex: Regex;
regex = load Regex Regex->PATH;
if (regex == nil) {
exit;
}
(re, nil) := regex->compile("EXPR", 1); # flg = 1
while (1) {
s := iobuf.gets('\n');
if (s == nil) {
iobuf.close();
break;
}
rslt := regex->execute(re, s);
if(rslt == nil) {
continue;
}
(a, b) := rslt[0];
# 処理
}
}
ということで、スクリプトの代わりにするのはきつい。
shと併用しなければだめっぽいですね。