我正在尝试将输出写入一个C文件,但我收到有关print() on closed filehandle
的错误。
my $fileoutput="output.c";
open OUTFILE, "> $fileoutput" or die $!;
for my $i (keys%hash) {
# grep for c file output and compare
# with xml key print both key and values
if (grep $_ eq $i,@c_result_array) {
if (defined $hash{$i}) {
my @values = $hash{$i};
print OUTFILE $i . "=> @values";
print OUTFILE "\n";
}
close OUTFILE;
}
}
答案 0 :(得分:3)
关闭for
循环内的输出文件。到第二次迭代时,文件句柄已经关闭。循环运行完成后,您必须关闭文件。
此外,裸字文件句柄具有包范围,它具有全局变量的所有缺点。使用词汇文件句柄。
此外,特别是如果您要打开的文件的名称来自外部,请使用open的三个参数形式,并始终在错误消息中包含该文件的名称。
最后,假设$hash{$i}
包含数组引用,因此如果要将其内容插入到字符串中,则必须取消引用它。
my $fileoutput = "output.c";
open my $OUTFILE, '>', $fileoutput
or die "Failed to open '$fileoutput': $!";
for my $i (keys %hash) {
#grep for c file output and compare with xml key print both key and values #
if (grep $_ eq $i, @c_result_array) {
if(defined $hash{$i}) {
my @values = @{ $hash{$i} };
print $OUTFILE "$i => @values\n";
}
}
}
close $OUTFILE
or die "Failed to close '$fileoutput': $!";