在 perl 中使用文件句柄将 STDIN 写入文件

Writing STDIN to a file using filehandle in perl

我刚开始学习 perl,正在学习文件句柄。

  1. 我想将我的 STDIN 写入文件。我如何使用文件句柄来做到这一点?
  2. 是否也可以在不使用 FH 的情况下执行相同的操作?

我尝试了以下方法,但没有成功:

#!/usr/bin/perl

$file = 'File.txt';

open ($fh, '>', $file) or die "Error :$!";

print "Enter blank line to end\n";

while (<STDIN>) {

    last if /^$/;
    print "FH: $fh \n";
    print "dollar: $_ \n";
}

close $fh;* 

下面的方法有效,但我不明白为什么。

#!/usr/bin/perl

open(my $fh, '>', 'report.txt');

foreach my $line ( <STDIN> ) {

    chomp( $line );

    print $fh "$line\n";
}

close $fh;


print "done\n"; 

您已打开文件句柄 $fh 以写入您的文件。您的第二个示例将数据打印到此文件句柄,因此它有效:

print $fh "$line\n";

但是你的第一个例子没有打印到 $fh,所以输出到 STDOUT

print "FH: $fh \n";
print "dollar: $_ \n";

为了让您的第一个示例正常工作,您需要打印到正确的文件句柄。

print $fh "FH: $fh \n";
print $fh "dollar: $_ \n";