undef $fhだとエラーとれないから$fh->closeがいいんじゃない?

んでIO::Fileは早くなるどころかopenより遅くなるハズ
じゃぁなんでIO::Fileを使うかだけど
・オブジェクト指向であつかえる
・閉じ忘れてもスコープ抜ければ勝手に閉じてくれる
・グロブつかうと名前空間ぶつかりやすい
 (最近はopen($fh,'filename')でも解決できるが)
・グロブはわたすのめんどくさい
ってとこかな?

http://www.cpan.jp/mirror/perldoc.jp/docs/perl/5.6.1/perlfaq5.podを
読むと参考になるかもしれません。