我正在写一个像下面这样的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!”打印。
我尝试使用变量作为文件名,但这也不起作用。
答案 0 :(得分:5)
始终在脚本中使用strict
和warnings
,这会遇到您遇到的错误:
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 $_;
}