awkでcgi

あー。なんだかhtmlまともに書くの久しぶり(まともなのか?)。

だいぶ前につくったやつを、ちょこっとだけ手直し。
かなりくだらないというか。かなり強引です。
decode.cgiは単なる shell script で、ここから decode.awk を呼んでます。
別に分けないで1ファイルでもできますけど。あんまり print "<html>" とか書きたくなかったので。。。 decode.awk ってば、やってることは フィールドの分割処理と、URL デコードするだけです。
こちらでお試しできます。

内容ですが
BEGIN ブロックで GET or POST の判定(すっごいあまあま)して、GET なら POST にむりやり変換という処理で、なにやらごまかしてます。
POST にすると、中身が標準入力から入ってくるので、レコードを & で区切って(RS="&")、これまた無理やりレコードごとに処理させています。
フィールドと値の分割は、ただ単に = で区切ってるだけです。= の有無を判定してないんで、= で区切ってないフィールドがあるとちょっと誤動作します(ダメダメですな)。
= で区切ったあと、それぞれ decode 関数にて URL デコードしてます。これまたかなり強引です。なにせ gsub で1文字ずつ置換です。とってもへたれ。
それぞれの値に対して処理が必要な場合は END ブロックでやってるように VALUE の多重配列を for でまわすと値が取り出せます(この例では、ただ単に値を表示しているだけです)。

しかし、awk でこんなことやって使い途があるのでしょうか。。。
結局のところ、標準入力が cgi の値の受け渡しに使われてしまうので、END ブロックで処理を書くしかないわけで。
awk を使う意味の8割くらいがなくなってる気がしますね。。。
有効な使い途を思いついた方は連絡ください。
あと、もっときれいに書けるよ!という方も。

激しくくだらないもの置き場へもどる
トップへもどる