这几天连续写了几个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的文档挺完善的,改天可以发给你看看。
Posted by vecentli | Apr 10, 2007 11:59 PM
另外有一种更为自然的方式,作为你的程序,尽管输出到 STDOUT。如果要保存到文件中,则直接
$ yourscript.pl > filename
这种方式是 Unix 下面程序的约定俗成的一致做法:从 STDIN 得到数据,向 STDOUT 输出数据。
如果想要保存文件的同时还要在终端中看输出结果,可以用 tee 命令。
$ yourscript.pl | tee filename
Posted by Chunzi | Apr 11, 2007 10:45 AM