我想写一下我在hash中填充的键和值对。我正在使用
open(OUTFILE,">>output_file.txt");
{
foreach my $name(keys %HoH) {
my $values = $HoH{$name};
print "$name: $values\n";
}
}
close(OUTFILE);
不知怎的,它创建了output_file.txt
但它没有将数据写入它。可能是什么原因?
答案 0 :(得分:5)
使用:
print OUTFILE "$name: $values\n";
如果没有在print语句中指定文件句柄,则打印到STDOUT,默认情况下是控制台。
答案 1 :(得分:4)
open my $outfile, '>>', "output_file.txt";
print $outfile map { "$_: $HOH{$_}\n" } keys %HoH;
close($outfile);
我清理了代码,这里使用map函数会更简洁。我也使用我的变量作为文件句柄,总是很好的练习。还有更多方法可以做到这一点,你应该查看Perl Cook书,here
答案 2 :(得分:1)
当你打开OUTFILE时,你有几个选择如何写它。一,您可以在打印语句中指定文件句柄,或者两个,您可以选择文件句柄然后正常打印(不指定文件句柄)。你们两个都没做。我将演示:
use strict;
use warnings;
use autodie;
my $filename = 'somefile.txt';
open my( $filehandle ), '>>', $filename;
foreach my $name ( keys %HoH ) {
print $filehandle "$name: $HoH{$name}\n";
}
close $filehandle;
如果你要使用select,你可以这样做:
use strict;
use warnings;
use autodie;
my $filename = 'somefile.txt';
open my( $filehandle ), '>>', $filename;
my $oldout = select $filehandle;
foreach my $name( keys %HoH ) {
print "$name: $HoH{$name}\n";
}
close $filehandle;
select $oldout;
每种方法都有其用途,但为了编写清晰易读/维护代码,您通常会使用第一种方法,除非您有充分的理由。
请记住,无论何时打印到文件,请在print语句中指定文件句柄。
答案 3 :(得分:0)
尽管如此,还有另一种方法:使用select
更改默认输出文件句柄。在另一种替代方法中,使用while ( each )
而不是foreach ( keys )
在某些情况下会更好(特别是当哈希以某种方式绑定到文件并且需要大量内存时所有的钥匙一次)。
open(OUTFILE,">>output_file.txt");
select OUTFILE;
while (my ($name, $value) = each %HoH) {
print "$name: $value\n";
}
close(OUTFILE);