文字列をそのままパイプラインに投入できるように
Sun Feb 8 00:01:47 JST 2015 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 2387, keywords:プログラミング,GlueLang,寝る,日記,グルー言語を作る この記事は最終更新日が8年以上前のものです。
GlueLangが変態言語になるかどうかの瀬戸際である
本日は久々にGlueLangを作りこんでいました。読んでてもほとんどの人が分からんと思いますが作業日誌です。いや、読んでも分からんとか言ってたら絶対普及しないので、この前LTやったスライドを貼り付けときます。
ファイルや変数に直接文字列を指定可能に
今まではechoを書かないとファイルや文字列に文字が入って行きませんでしたが、要らなくなりました。
uedambp:GlueLang ueda$ cat fuge.glue
import PATH
file f = 'abc'
str s = 'cde'
cat f
echo s実行するとこの通りに機能します。
uedambp:GlueLang ueda$ ./glue fuge.glue
abc
cdeたぶん今後、Pythonみたいに文字列をいじれるように改良すると思います。こんなふうに。
file f = 'ab%sc%d' % 'hoge' 1234リテラルの文字列の改行に対応
ということは、ヒアドキュメントは不要ということで、こんなふうにAWKのコードを書くことができます。
uedambp:GlueLang ueda$ cat fuga.glue
import PATH
file code = '
NF==2{print "素数",$2}
NF!=2{print "素数じゃねえ"}
'
seq 1 10 >>= gfactor >>= awk -f codeこれでglue自体には文字列処理を実装する必要がないなーと思ったり思わなかったり。
一応実行しときます。
uedambp:GlueLang ueda$ ./glue fuga.glue
素数じゃねえ
素数 2
素数 3
素数じゃねえ
素数 5
素数じゃねえ
素数 7
素数じゃねえ
素数じゃねえ
素数じゃねえwhereを使うとワンライナーにawkの長いコードをぶち込むことができます。しかしちょっと分かりにくいかなあ・・・
uedambp:GlueLang ueda$ cat fuge.glue
import PATH
seq 1 10 >>= gfactor >>= awk -f awkcode
where file awkcode = '
NF==2{print "素数",$2}
NF!=2{print "素数じゃねえ"}
'procをサブシェル化
変数やimportの情報を引き継げるようになりました。ということで、上のコード(fuge.glue)は次のように書き直すことができます。awkのパスが通ります。
uedambp:GlueLang ueda$ cat fuge.glue
import PATH
proc awkcode = awk '
NF==2{print "素数",$2}
NF!=2{print "素数じゃねえ"}
'
seq 1 10 >>= gfactor >>= this.awkcode最後に変態機能について。次のように文字列をパイプラインに送り込めるようにしました。
uedambp:GlueLang ueda$ cat hoge.glue
import PATH
'abc
def
ghi' >>= rev
### 実行 ###
uedambp:GlueLang ueda$ ./glue hoge.glue
cba
fed
ihg改行がちょっと格好悪いので、リストで渡すこともできます。ただ、単に改行でjoinして渡すだけなので、紛らわしいかもしれません。
uedambp:GlueLang ueda$ cat hoge2.glue
import PATH
['abc','def','ghi'] >>= rev
###結果は同じ###
uedambp:GlueLang ueda$ ./glue hoge2.glue
cba
fed
ihgだんだん変態フレーバーが漂い始めたような気がしないでもない。
寝る。
ノート
Tweet