2010-05-20 140 views
4

也许我在用错误的关键字搜索,或者这是一个非常基本的问题,但我无法找到我的问题的答案。我无法将我的whois命令的结果写入新的外部文件。如何使用Perl将输出写入新的外部文件?

我的代码如下。它需要$readfilename(它是一个包含IP列表的文件名)和$writefilename(它是输出的目标文件)。两者都是用户指定的。对于我的测试,$readfilename在三条独立线路上包含三个IP地址,因此在用户指定的输出文件中应该有三个单独的whois结果。

if ($readfilename) { 
    open (my $inputfile, "<", $readfilename) || die "\n Cannot open the specified file.  Please double check your file name and path.\n\n"; 
    open (my $outputfile, ">", $writefilename) || die "\n Could not create write file.\n\n"; 
    while (<$inputfile>) { 
     my $iplookupresult = `whois $_ > $writefilename`; 
     print $outputfile $iplookupresult; 
    } 
    close $outputfile; 
    close $inputfile; 
} 

我可以执行该脚本,并用一个新的外部文件中结束,但在该文件的半部具有二进制垃圾数据(在CentOS运行),并且仅在WHOIS查询中的一个(或一个的一部分)是可读的。

我不知道我一半的文件是如何结束了二进制...但我的方法一定是不正确的。有没有更好的方法来达到相同的结果?

+0

对不起,在我的一个测试的例子中有一个错误的变量。它已被删除。 – Structure 2010-05-20 03:47:09

+0

我添加了“错误”脚本,以便其他人可以看到*不*做出愚蠢的错误。我花了很长一段时间试图调试这... – Structure 2010-05-20 03:56:12

回答

7

您使用shell重定向重定向的whois输出到文件中。但是你也打开了文件进行写入,并试图将数据写入同一个文件,给你垃圾。只需放下外壳重定向:

print $outputfile `whois $_`; 
+0

你知道什么好笑 - 那是我从我的例子中删除的代码,认为它是错误的。我刚刚检查过,它实际上还在我的脚本中,以及在我的测试过程中...... *叹气*谢谢! – Structure 2010-05-20 03:54:25