写入文件并打开相同的文件进行输入

时间:2016-09-07 14:38:39

标签: perl

我正在写一个像下面这样的Perl脚本

open(FH, '>', "temp.out") or die "cannot open";
select FH;

print "Hello World!";
close FH;

open (FI, "temp.out") or die "cannot open";
while ( <FI> ) {
    print $_;
}

不幸的是,当我运行这个脚本时,我没有得到“Hello World!”打印。这应该是理想的情况,不是吗?

但是在temp.out文件中我可以看到“Hello World!”打印。

我尝试使用变量作为文件名,但这也不起作用。

2 个答案:

答案 0 :(得分:5)

始终在脚本中使用strictwarnings,这会遇到您遇到的错误:

print() on closed filehandle FH at t.pl line 10, <FI> line 1.

即使您关闭了FH,您的select仍然会被选中。除非你有很多印刷语句,并且能以某种方式隔离你的print(例如在功能开始时选择并在结束时恢复之前的默认值),我说它比明确更好在for word in split_list: first = word[0] new_sentence = word[1:] + first + pyg final_sentence = "".join(new_sentence) print final_sentence 语句中指定文件句柄。

答案 1 :(得分:3)

您的print $_进入已关闭的文件句柄。由于您选择了FH作为默认输出文件句柄,并且关闭了它,因此您不能再在那里写了。无论如何,该文件句柄不是屏幕。所以,即使它是开放的,你也不会在屏幕上看到它。

您需要保存STDOUT并重新选择它。

open(FH,'>',  "temp.out") or die "cannot open";
my $stdout = select FH;
print "Hello World!";
close FH;
select $stdout;  # here
open (FI, "temp.out") or die "cannot open";
while(<FI>){
    print $_;
}