なんとなくm4のドキュメントを復習していて、思いついた事。
m4マクロでシーザー暗号を作ってみた。
$ cat caesar.macro define(`TEXT', `This is a sample text.') translit(TEXT, `a-z', `n-za-m') $ m4 caesar.macro Tvwg wg o goadzs hslh.で、これでうまくいったかというとそうでもないらしい。
確認のためにabc..xyzまでを変換してみる。
$ cat caesar.macro define(`TEXT2',`abcdefghijklmnopqrstuvwxyz.') translit(TEXT2, 'a-z', `n-za-m') $ m4 caesar.macro opqrstuvwxyzabcdefghijklm.どうやら一文字'n'が足りない。消えてしまっているようだ。
info m4で確認すると対応する文字が少ない場合には文字が消えるとあるけれど、何でかなぁ。
まぁ長い分には単純に無視されるとあるが、やっぱりおかしいのでいろいろチェック。
回答編
ああ、わかった。quoteでちゃんと囲めていなかったんだ。バッククォート"`"とクォート"'"でちゃんと囲む。
$ cat caesar_v2.macro define(`TEXT2',`abcdefghijklmnopqrstuvwxyz.') translit(TEXT2,`a-z', `n-za-m') $ m4 caesar_v2.macro nopqrstuvwxyzabcdefghijklm.なんとか、うまくいったらしい。よしよし。
わかってたのに、なんで打ち間違ってしまったんだろう。 ま、こんな日もあるってことなのかな。
0 件のコメント:
コメントを投稿