尝试写入包含名称和序列号列表的文本文件。每一个都将在一个单独的行。如果名称::: number已经存在,它不应该写它,但它似乎找不到已存在的那个,所以它重写它。这是我的代码:
$regfile = "REG/reglist.txt";
$find = $name.":::".$serial."\n";
$index = 0;
open(REG,">>$regfile") or fail();
my @line = <REG>;
foreach $line (@lines) {
if ($line eq $find) {
$index++;
}
}
if ($index == 0) {
print REG "$find";
} else {
print REG "was already there.\n";
}
close(REG);
答案 0 :(得分:4)
您应该处理两个文件
第一个,用于读取目的($fh_reg
on“REG / reglist.txt”)。注意'&lt;'阅读模式:
open my $fh_reg, '<', "REG/reglist.txt" or die $!;
第二个,是用于写入所需输出的临时文件($fh_temp
)。 File::Temp模块可能会对您有所帮助:
use File::Temp qw/tempfile/;
# ...
my ($fh_temp, $filename_temp) = tempfile();
最后,rename将此文件作为第一个文件。
rename $filename_temp, "REG/reglist.txt";
答案 1 :(得分:2)
您正在尝试从已打开输出的文件句柄REG
中读取
您还在阅读数组@line
,然后使用@lines
的内容
你必须始终
use strict;
use warnings 'all';
在你编写的每个Perl程序的顶部
答案 2 :(得分:1)
您需要打开文件以进行读/写访问。
注意:'+&lt;'将打开文件进行更新。 '+&GT;'将覆盖,并将击败你正在尝试的东西。
以下编辑应该这样做:
open(REG,"+<$regfile") or fail();
答案 3 :(得分:-1)
在$ regfile之前修复了小于符号后,我发现它只是一个错字。我正在声明 @line ,但试图读取数组 @lines 。现在工作。谢谢大家!