真/偽と定義/未定義

Perlで、0は偽だけど定義済みというのを忘れてコードを書いてました。while()は真偽値だから、definedで定義済み/未定義で確かめないといけないんだね…

while($_ = readdir DIR) { foo() }

は間違いで、

while(defined($_ = readdir DIR)) { foo() }

って書いて定義済みかどうかを確かめないと、"0"ってファイルがあった場合に偽と判断してループを抜けちゃうんだ。