昨日の深夜にサーバ接続テストをやったんだけど、23:30から準備を始めているはずなのに、全然先方からの連絡無し。
お客さんとこに入った業者が、俺の作ったサーバに向けてデータを投げてくるテストなんだけど、深夜1時になっても 2時になっても連絡無し。
で、2:30頃、やっと「データ流してるんで、届いてるか見てもらえますか」との連絡が。
まあ、こういうテストでは、開始時間がずれてしまうのはよくあることなので、仏のような心で俺は対応したよ。
で、テスト結果なんだけど、一部のデータだけうまいことヘッダ部とデータ部を分離できなくてエラーになってる。
あらら・・・と思って、ログの検証とか、データの解析とかしてたら、「4時までにテスト環境を本番環境に戻さないといけないので・・・」と 3:30にはテスト終了。翌日(つまり今夜)、再度テストを行うことになった。
いやあ、こっちの検証時間が 1時間しかないというのはどうなの?(^^;
まあ、原因は俺のコーディングミスだったんだけど(笑)
バイナリデータを正規表現を使って分割してるんだけど、例えば、
if ($data =~ /^(.{2})(.{2})\x00(.{740}).*$/) {$key1 = $1;$key2 = $2;$body = $3;}
みたいな処理で、760バイトあるデータなのに、$body になにもセットされないという状況。
ま、一眠りしてソース見たらすぐに間違いに気づいたんだけど、この時は深夜に延々待たされて、頭がぼーっとしてたんでね、すぐにミスに気づかなかった。
Perl 書ける人、わかる?
そう、s オプションが抜けてるんだね(^^;
s オプションは「ワイルドカードのドット( . )が改行にもマッチするようにする」オプションね。
このオプション付けないと、例えば LF(\x0A)にマッチングしてくれないんだよね(^^;
だから改行コードと同じコードが混ざることが想定されるバイナリデータのマッチングじゃ、必ず s オプションは付けないといかんよね。
ああ、しょうもないミスで今夜も寝不足確定だ(^^;
つーか、昨夜(というか今朝未明か)、もう少しうちの調査時間くれれば気づいたと思うのに・・・