前日からあわせて、20時間ほどPerlをいじってました……。
だって…………どうしてもこのコラムのスクリプトを完成させたいものだったから……。
Internal Server Errorと闘い、スクリプトのバグと闘い、自らの睡魔と闘い。
そして!晴れてここにコラムの参照スクリプト&編集スクリプトが完成したのであります!
…………たぶん。(ぉ)
なにしろ、2日くらいで勢いに任せて作っていたものですから、月が変わったり年が変わったりするとどういう挙動を見せるのか分からないところがあります。(ぉ)
今のところ、考えられるバグは取り除いているつもりですが……。そのうち、ボロが出るかも。(笑)
にしても、CGIて難しいですね。
後期にプログラミングを扱う授業を取ろうと思っているので、練習がてらにはじめてみたのですが。
最初の頃はエラーの連続で、『Hello, World!』というあの有名な言葉を表示させるだけでもどれだけ苦労したことか。
なんせ他人様の作ったものをいじるのではなく、自分で一つ一つ定義していくのでそれはもう意味不明な言葉がズラズラと。
特に苦労した点といえば……。
- 何故かInternal Server Error(ぉ)
- 文字コードによる文字化け
- malformed headers from script. というエラー
- ファイル出力による空白文字の消去
- データの保存
Internal Server Errorにはいろいろあります。chmodでパーミッションを変更するのを忘れていたり、セミコロンを忘れていたり……。割と初歩的なところでつまずいていることが多かったんですが。
文字コードによる文字化けは、Jcode.plというライブラリを使用してようやく回避できました。このライブラリを使って文字コードをSHIFT-JISにコンバートしないと、EUCで出力されてくるんです。(Linuxだし)
そのせいでブラウザで読み込むと、文字コードをいちいち変更しないと読めないという……。これは対処方法を探すのにはてこずりましたが、コンバート自体は楽でした。ライブラリってありがたいね。(笑)
3つ目のよく分からんエラーは、HTMLタグを出力する順番が狂ってるとなるそうで。
ちょうどこの頃、変数を見やすいようにまとめていたんですが、そのときに順番が狂ってしまったみたいでこのエラーが延々と吐き出されつづけました。3時間くらい苦戦。(´Д`;)
ファイル出力による文字消去は、どちらかというとバグというより仕様との闘いって感じッス。(何)
Perlでのファイルの読み書きは割と楽で、配列を使えば一度に読み込むことが出来、書き出すことも出来るんです。けど読み込みは問題ないとして、書き込みでは配列をそのまま書き出すと配列の一番最後にある空白文字がくっついてしまい、HTMLソースがおかしなことになるので苦労しました。
行末の改行コードを削ってみたりもしましたが、配列で書き込みを行おうとするときの仕様らしく、どうしても空白が消せなくて。最終的にはまとめた配列をもう一度分解して、一列順に書き込むという方法で回避しました。
最後、データの保存はOpen関数の挙動に悩みました。エラーを考えて、if( !open( FILEHANDLE, ">> *.cgi" ) ){...}のような方法で読み込もうとしたんですが、この方法だと何故か読み込めなくて結局if文をはずして動作させることに。なのでデータ保存は万全を考えて、temp.cgiに書き出してからその名前とパーミッションを上書き変更する方法にしました。これでログが壊れる可能性が低くなるはず…………だと……思う………………たぶん。(ぉ)
CGIとかHTMLに興味が無い人にはうざいだけなのですが(汗)、ちょっと愚痴りたくて。
出来たばっかのCGIでいきなり愚痴るのもアレかと思いますがね。(´・ω・`)
コラムの閲覧も、今度からCGIで出力していますので不具合が発生したら掲示板に『この愚鈍が!!貴様のヘヴォなプログラミング能力のせいでエラーを吐き出しおったわ!!精進して出直せぃ!!!』とでも書き込んでやってくだせぇ。(ぇ)
それでは~。
余談。
実は完成を早めたのは、北海道地震のネタを書きたかったからなのだ。書く気力もなくなったけど。(ぉ)
ちょっと前までいたところが震度6弱もあったもんだから…………。北海道のあやつはどうしたのかのぅ……。
さらに追記……。
スクリプトを作る際にお世話になったサイト様に敬意を表して、リンクしたいと思います。
やっぱり俺って、こういうプログラミングとか好きなんだなぁとしみじみ思う今日この頃。
Comment