読者です 読者をやめる 読者になる 読者になる

LeopardのTMPDIR環境変数

Mac OS X 10.5.1 LeopardのTMPDIR環境変数が若干不思議な件。Terminal.appでecho $TMPDIRすると以下のようになる。

$ echo $TMPDIR
/var/folders/A2/A2AtxiekJ3jlm3DDlp98aE+++TI/-Tmp-/
$

/var/foldersに入るのはあまり見たことがない。ところがsshでログインしたあと、だとTMPDIRになにも入っていない。

$ ssh localhost
$ echo $TMPDIR

$

/etc/profileとかには特別な記述なし。sudo su - するとTMPDIRは空で、iTerm.appで確認するとTMODIRに上と同じディレクトリ名が入る。どのタイミングでTMPDIRに値が入ってるいるのか知りたい。

なんで、こんなことごちゃごちゃ言っているかというと、CPANモジュールのテストで、これのせいで通らないやつがある。Log::Log4perlのテスト*1で、以下のようなコードがあるんだけど、

like($data, qr#GET file:$tmpfile#);

$tmpfileのなかにA2AtxiekJ3jlm3DDlp98aE+++という文字列が含まることになる。これを正規表現としてコンパイルしようとすると+が連続しているということでエラーが出てテストが失敗する。+とか*とかの量指定子の連続は組み合わせ数が膨大になる可能性があるので正規表現エンジンが止まってしまう。

TMPDIRの++の連続はほかのLeopard環境でも見られるので、うちの環境にはかぎらない問題だと考えられるけど、どうでしょう。

量指定子のあたりの詳細は詳説正規表現で読んだんだけど、忘れたのであとでチェックしよう。

詳説 正規表現 第2版

詳説 正規表現 第2版

*1:t/048lwp.t