チャットのログ取得

しばらくログを取ってなかった分、保存しておこうと思ってログ取得スクリプトを走らせたけど、なぜかエラーになって取得できません。何箇所かデバッグプリントを入れて試してみると、どうも正規表現がうまくマッチしてない様子。元データのフォーマットが変わったかと思って、HTMLソースを見てみたけど、別に変わってない。で、よく考えたら。正規表現が結構複雑になってるので、変数に取り出して、

$regexp = qr/foo/;
while (m/^$regexp$/gix) { bar(); }

ってするようにしたんだけど、このコードが間違ってたのが原因。ただしくは、以下のように、

$regexp = qr/foo/ix;
while (m/$regexp/g) { bar(); }

正規表現を変数に代入する時点で、xiオプションを付けておかなきゃいけなかったこと((iオプションは不要かも))と、勘違いして先頭と末尾のアサーションを付けてたこと。そんなの付いてちゃマッチするはずが無いです。まったく、なにをボケたコーディングしてるんだか。これを直してもう一度トライすると、今度は大丈夫。きちんと取得できました。
あとは、リファラを正しく指定するように少しだけコードを修正、いままでは結構適当に送ってたからね。ユーザエージェント名もちょっと変更して、タイムアウトは30秒から15秒に変更。それとエラー、というか、本来意図しない結果が返ったときにdieするべき場所で適切にdieするように。一箇所、エラーが起きたときdieするべき場所で、dieしないままで処理を継続してしまっていたので。