这几天连续写了几个Perl程序, 有的是自愿写的, 有的是任务型的, 这都无所谓了. 在所有的程序中都有一个共同点, 那就是要么程序要输出到屏蔽, 要么输出到一个文件, 对于刚学Perl的我来说, 这个地方也是花了不少时间查有关资料的, 不过最后让我明白的文档是Perl Doc站点上的FileHandle说明文档. 先说说我是如何处理的.

    在我的程序中, 如果在命令行指定了一个log文件名的话, 就向log文件写, 否则就向屏蔽写出. 大致代码如下:

use FileHandle;
......
sub openFile
{
   my ($logfile) = @_;
   my ($fh);

   if (defined($logfile))
   {
      $fh = new FileHandle($logfile, "w+");
   }
   else
   {
      $fh = new FileHandle();
      $fh = fdopen(fileno(STDOUT), "w+");
   }
   $fh;
}

    接下来就可以调用了, 如果返回一个未定义(undef)的值, 则表示不能写出到日志文件了. 否则可以调用如下方法, 向文件输出了:

$logfile->print(...);
$logfile->printf(...);

    我还改了写文件操作的一个属性, 就是无论写什么, 写多少东西都进行flush操作, 这样的话可以用"tail -f"来看程序进行到那一步了, 代码如下:

$logfile->autoflush(1);

    关于更多的调用方法, 可以参考IO::Handle包的说明.