如何读写文本文件并将其放在同一个文件中?我试过但我得到了空文件。
我的代码是:
#!/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;
答案 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)