读写文本文件

时间:2011-08-25 06:49:50

标签: perl

如何读写文本文件并将其放在同一个文件中?我试过但我得到了空文件。

我的代码是:

#!/opt/lampp/bin/perl    
print "Content-Type : text/html\n\n";    
$ref = '/opt/lampp/htdocs/perl/Filehandling/data_1.txt';    
open(REF, "+<", $ref) or die "Uable to open the file $ref: $!";    
while (<REF>) {    
    if($_=~ m/Others/gi) {
        $_  =~ s/Others/Other/gi;
        print "$_\n";
    }
}

$ref = '/opt/lampp/htdocs/perl/Filehandling/data_1.txt';

open(REF, "+>", $ref) or die "Uable to open the file $ref: $!";
print REF "$_\n";
close REF;
close REF;

3 个答案:

答案 0 :(得分:4)

perl -pi -e 's/Others/Other/gi' /opt/lampp/htdocs/perl/Filehandling/data_1.txt

-i选项就地编辑文件,即用新内容覆盖文件。

s///运算符如果没有匹配则不会替换任何内容,因此在尝试替换之前,如果匹配,则不必与m//核对。

脚本中的流控制存在缺陷;你打开阅读,然后打印到标准输出(不回到文件),然后打开写入,但不要写任何有用的东西(或者,只是你在输入循环中读取的最后一行)。

Content-Type:标题的内容是什么,您想将其作为CGI脚本运行吗?这听起来像是一个安全问题。

如果有替代品,你只想打印吗?如果是这样,试试这个:

perl -ni -e 's/Others/Other/ig and print' /opt/lampp/htdocs/perl/Filehandling/data_1.txt

请注意-p的更改,它会在您的脚本周围添加一个读取和打印循环,更改为-n,只会读取但不会打印您的文件。

答案 1 :(得分:2)

似乎您想要的只是数据_1.txt中的s/Others/Other/gi。 您可以使用一行代码轻松实现:perl -pi.bak -e's/Others/Other/gi' data_1.txt

如果您仍想读取和写入同一文件,可以查看CPAN的IO::InSitu模块。

答案 2 :(得分:2)