tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

一見簡単そうだけど、実は難しい処理

CSV ファイルの解析

perl で言えば、

  my @items = split(/,/, $line);

で済んでいるなら幸せ。ダブルクォーテーションの内部だとカンマを見ないとか、その他もろもろの本来の CSV の処理が入るとあっという間に死ねる。

Perl なら、Text::CSV 系のモジュールを使いましょう。ほかの言語でもライブラリがあるはず。

コマンドラインオプションの解析

@ARGV をみてぱっと解析できれば幸せ。でも引数をとるオプションやらとらないオプションやら、もろもろあるとあっという間に死ねる。

そういえば、昔(といっても数年前だけど)に、Solaris の telnetd で、ちょっとしたシェルを実行するだけで簡単に root をとられてしまうような恐ろしいバグがあった。(ユーザ名もパスワードも何も要らず、telnetd が開いているだけで NG という非常に危険なバグだった)

コマンドライン引数の処理はそのくらい難しい。(し、場合によっては危険を伴う処理だ)

Perl なら Getopt 系のモジュールを使いましょう。

例外処理(2010/02/06追記)

基本的なはずの例外処理がとんでもなくこんがらがってしまうことがある。

http://nothingmuch.woobling.org/talks/takahashi.xul?data=yapc_asia_2009/try_tiny.txt
http://kawagner.blogspot.com/2007/08/better-exception-handling.html

前者のように、言語のサポートの問題で駄目になることもあるし、後者のように言語仕様とライブラリの仕様とアプリの要件が入り混じって起こることもある。

前者のように、ライブラリを入れ替えてさくっと解決できるケースもあるだろうし、どうにもならない場合もあるだろう。

起こりうる例外(と例外処理を乱す要因)に対してどこまでシビアに対応するか、の問題かな。原発の制御プログラムみたいに、いかなる例外もちゃんと捕捉し、ちゃんと処理しなければならない、というやつだと大変だろうね。

意外に思いつかなかったので

今後も思い出すたびに追記するかもしれんです。