-d_ ってなあに?
Plaggerのソースコードの中に、私の知らない表現があったので興味を惹きました。
% ack "\-d_" Plagger/Cache.pm 11: mkdir $conf->{base}, 0700 unless -e $conf->{base} && -d_;
おお!?"-d_"のアンダーバーの部分って何!?
Perl のリファレンスで探したところ、これは特殊ファイルハンドルとのこと。
_ (下線) 最後に成功したstat, lstat, またはファイルテスト演算子(-w $fileや-d $fileなど)の情報をキャッシュするのに用いられる特殊ファイルハンドルである。 プログラミングPerl VOLUME2 P.778より
- 作者: ラリーウォール,ジョンオーワント,トムクリスチャンセン,Larry Wall,Jon Orwant,Tom Christiansen,近藤嘉雪
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2002/09
- メディア: 単行本
- 購入: 4人 クリック: 94回
- この商品を含むブログ (63件) を見る
なるほど。では、次のテストコードで確かめてみよう。
% cat test.pl open FH,"dummy.txt" or die $!; print "come1\n" if(-f FH); print "come2\n" if(-d _); print "come3\n" if(-f _); print "come4\n" if(-d_); # oops! print "come5\n" if(-f_); % touch dummy.txt % perl test.pl come1 come3 come4 # oops! come5
あれ? ディレクトリでないはずのFH がディレクトリとして判定(# oops!、の部分)されている。これはなぜだろう!?