求助,perl处理大文件出错

求助,perl处理大文件出错

$filename=$ARGV[0];
open FILE, "<$filename"
        or die "Cannot open file: $!";
undef $/;
while($line = <FILE>)
{
$line=~ s/\t/,/g;
print $line;
}
close FILE;

我用上面这段代码处理一个1g以上的文件,
提示我错误出在$line=~ s/\t/,/g;这一行上,
错误提示为:
Substitution loop at onetxt.pl line 7, <FILE> chunk 1.

可是处理几百兆的文件都没问题,疑惑。请求高人指点,万分感谢!!
ps,我刚接触perl
你有什么必要把1G的东西都读到内存里面?
一行一行处理不好嘛?
就这么个替换用sed方便多了
谢谢高人指点
我才学习几个小时,我还以为我这个就是一行一行处理呢
怎样一行一行处理?
还有,这个只是我截取代码的一小部分
不想用sed

#undef $/;
while(<FILE>)
{
s/\t/,/g;
print ;
谢谢machine,我去试试,呵呵
这个可以了,谢谢啦!!再次感谢machine
原来我这样写$line = <FILE>真是一次都读入内存啊,1g我都没感觉,内存4个g


QUOTE:
原帖由 wtfml 于 2008-11-18 22:04 发表
这个可以了,谢谢啦!!再次感谢machine
原来我这样写$line = 真是一次都读入内存啊,1g我都没感觉,内存4个g

undef $/之后$line = <FILE>会一次读入内存。
透彻,明白了,谢谢!!!!
不客气。其实这样的问题,看看小骆驼书,就大部分都能解决了


QUOTE:
原帖由 machine 于 2008-11-19 08:51 发表
不客气。其实这样的问题,看看小骆驼书,就大部分都能解决了

说的好。
可问题在于,许多人的目的其实并不是“快速地”解决问题,而是能够持续性地工作并获得相应的报酬。

也许,上个月就已经写下了 undef $/; $c = <FH>; 这样的代码,
然后运行了一个月,发现处理大于 1G 的日志时,会有些许小问题,
然后就去 BBS 发帖求助,领导问起来,就说是已经动员了社区的力量来解决问题,
可是很遗憾,目前还没有得到有效的回复。(适当配合表情以表达此项任务艰难之情)

然后,最终问题又解决了,领导会觉得 XXX 在完全不懂 Perl 的情况下,仍然克服了难题,完成了工作任务,应该予以嘉奖(这件事也许已经真实发生过了,也许连“也许”都不需要,而是“已经”了。)

如果上个月就看过小骆驼的话,那么这个月工作量、奖金、绩效,岂不是全都泡汤了?