Perl的如何操作文件 -- FileHandle

    这几天连续写了几个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包的说明.

留言 (2)

我有一篇 perl的文档挺完善的,改天可以发给你看看。

另外有一种更为自然的方式,作为你的程序,尽管输出到 STDOUT。如果要保存到文件中,则直接

$ yourscript.pl > filename

这种方式是 Unix 下面程序的约定俗成的一致做法:从 STDIN 得到数据,向 STDOUT 输出数据。

如果想要保存文件的同时还要在终端中看输出结果,可以用 tee 命令。

$ yourscript.pl | tee filename

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I used to take a walk in the early morning.
  • 我过去常一大早出去散步.
  • He used to live in my neighborhood.
  • 他曾与我是邻居.
  • Did you use to go fishing with friends?
  • 过去你常和朋友钓鱼吗?
  • We have known each other for 6 years.
  • 我们认识有六年了.
  • It has been a long time since last came here.
  • 自从我上次来这里已经有很长时间了.