print如何在不重新打开文件的情况下覆盖文件?[已解决]

print如何在不重新打开文件的情况下覆盖文件?[已解决]

open($n,">;num.log");
for($j=1;$j<10;$j++)
{
print $n $j."\n"
}
close($n);
这是我程序的部分代码,如果这样执行,结果是:
1
2
3
……
怎样才能让$j直接覆盖num.log,如果顺利执行完,就只有一个10,就像bash里面的echo $j > num.log一样。我不想每个$j都打开一次文件,或者删除文件,因为这个循环至少要上亿个,不知道这样对硬盘有没有损伤。
我这样做是因为我随时可能用^C或者kill终止这个程序,只要我记录下最后一个$j(而不需要记录所有的$j),我下次运行的时候就能从这个值开始。阿嚼

\n换成, \r 试试看...


QUOTE:
原帖由 apile 于 2007-11-17 12:58 发表
\n换成, \r 试试看...

1.
\r是不错的主意, 但只对输出到STDOUT有效, 文件依然会换行;
且另外个前提是后面的输出的长度不一定能完全覆盖前面的输出.

2.
文件的话,
每次print前, tell(FILEHANDLE, 0, 0)即可


QUOTE:
原帖由 apile 于 2007-11-17 12:58 发表
\n换成, \r 试试看...

这个对文件没用的,占用的空间还是那么大,只是cat出来是只有一行,如果你用vi打开,就会发现很多^M。


QUOTE:
原帖由 Lonki 于 2007-11-17 16:07 发表


1.
\r是不错的主意, 但只对输出到STDOUT有效, 文件依然会换行;
且另外个前提是后面的输出的长度不一定能完全覆盖前面的输出.

2.
文件的话,
每次print前, tell(FILEHANDLE, 0, 0)即可

好的,我试试。
不行啊。
我试了/b,显示是1^H2^H……



QUOTE:
原帖由 walkerxk 于 2007-11-18 04:26 发表
不行啊。
我试了/b,显示是1^H2^H……

非常抱歉... 神不知鬼不觉的把seek(FILEHANDLE, 0, 0)打成tell了 :<


QUOTE:
原帖由 Lonki 于 2007-11-18 07:30 发表


非常抱歉... 神不知鬼不觉的把seek(FILEHANDLE, 0, 0)打成tell了 :

谢谢,可以了,我去看看这两个函数,我试perl新手,有什么好的查询函数的手册么?我试linux,最好是chm或者htm打包的,在线的也可以。
PS:CU的订阅是不是有问题啊,明明订阅了,邮箱也对的,就是收不到邮件,而且回帖里面表情也不支持。
http://perldoc.perl.org/
左边的links, 右边的search

找modules
http://search.cpan.org/
算了,啃英文去了,中文毕竟读起来快一点,而且我每天翻译文章,对英文已经很头痛了。