基本だけど、コピペしたまま動くとは限らない。
PEAR::DBのセットアップ部分を、「めんどくさいから他のコピればいいや」という事をよくやる。今日も、ちょっとしたチェックスクリプトを書くだけだし、「DB周りはちょっとしたSELECTだけだから問題ないだろ」とそのままコピペ。
で、DBに格納したデータと、それを利用して書き出したファイルの内容を(ハッシュしてだけど)完全一致で比較してたら、どうも上手くいかない。色々と調べてたら、どうもファイルの終端がトリミングされてるっぽい事が発覚。
検証対象の、DBからデータを引き出したりファイルを書き出してたりするライブラリとかを遡って調べていっても、トリミングしてる部分は無い。DBをshellで見ても問題ない。BLOBで入れるとトリミングされるのかと疑って、MySQLのドキュメントとにらめっこしてみたり。
どうしようもない感が漂い始めてきたので、気分転換に喫煙。「そういえば、PEAR::DBのセットアップ周りは見てないかも」という事で、席に戻って調査再開。オプションを渡してる部分が臭かったので、何も無しでテスト。ばっちり。
原因は、移植性レベルを設定するportabilityをDB_PORTABILITY_ALLにしてたので、DB_PORTABILITY_TRIMが含まれていた事。オプション設定は頭から抜け落ちてた。
コピペの罠です。というか、「よく分からないなら使うな」という事ですね。実は、終端文字のトリミングは割とよく引っかかってたり。Emacsで書いてると、最後が改行で保存されるのか編集中の見た目だけなのかよく分からなくなったりします。頭がぐちゃぐちゃになってる時にこれになると、shellで表示してプロンプト表示が崩れたら最後の改行がないんだ、と力技。
全体に影響がある挙動を設定1つで賄えるのは便利なんだけど、そこをちゃんと押さえておかないと無駄な労力大爆発という教訓。フレームワークとか触るの怖い。。。

