Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PERL Net::DNS输出到文件_Perl_Dns - Fatal编程技术网

PERL Net::DNS输出到文件

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 (

对Perl完全陌生(正在学习中),需要一些帮助。下面是我发现的一些将结果打印到屏幕上的代码,非常好,但我希望将其打印到文件中。我该怎么做?当我打开一个文件并向其发送输出时,我会得到垃圾数据

代码如下:

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还有很多需要学习的地方。