PERL Net::DNS输出到文件
对Perl完全陌生(正在学习中),需要一些帮助。下面是我发现的一些将结果打印到屏幕上的代码,非常好,但我希望将其打印到文件中。我该怎么做?当我打开一个文件并向其发送输出时,我会得到垃圾数据 代码如下:PERL Net::DNS输出到文件,perl,dns,Perl,Dns,对Perl完全陌生(正在学习中),需要一些帮助。下面是我发现的一些将结果打印到屏幕上的代码,非常好,但我希望将其打印到文件中。我该怎么做?当我打开一个文件并向其发送输出时,我会得到垃圾数据 代码如下: use Net::DNS; my $res = Net::DNS::Resolver->new; $res->nameservers("ns.example.com"); my @zone = $res->axfr("example.com"); foreach $rr (
use Net::DNS;
my $res = Net::DNS::Resolver->new;
$res->nameservers("ns.example.com");
my @zone = $res->axfr("example.com");
foreach $rr (@zone) {
$rr->print;
}
当我加上:
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
.....
$rr -> $fh; #I get garbage.
当你在学习一门新语言时,对代码进行随机更改,希望它们能做你想做的事情,这不是一个好主意。更好的方法是阅读您正在使用的库和函数的文档 原始代码使用
$rr->print
。文件说明:
打印
$resolver->print;
在标准输出上打印解析器状态
那里的print()
方法是以标准Perl函数命名的,我们可以使用该函数将数据打印到任何文件句柄。有一个名为Net::DNS::Resolver的方法,其文档记录如下:
字符串
print $resolver->string;
返回解析程序状态的字符串表示形式
所以它看起来像是$rr->print
相当于print$rr->string
。将其更改为打印到新的文件句柄非常简单
print $fh $rr->string;
p、 顺便说一句,它是“Perl”,而不是“Perl”。您的
@zone
数组包含一个对象列表,其print
方法将对象字符串化并打印到当前选定的文件句柄
要将相同的内容打印到不同的文件句柄,您必须自己对对象进行字符串化
这应该行得通
open my $fh, '>', $filename or die "Could not open file '$filename': $!";
print $fh $_->string, "\n" for @zone;
如果没有至少一个垃圾外观的小例子,
print
方法就是print shift->string,“\n”
,那么说你有“垃圾”就没有什么特别的帮助了,所以不像文档中所说的那样打印到STDOUT
,它实际上会打印到当前选定的文件handleHanks…该文件的输出与屏幕的输出相同。关于Perl还有很多需要学习的地方。