【发布时间】:2012-02-25 23:04:01
【问题描述】:
我正在尝试使用 perl 通过文件将 IP 转换为主机名(不使用内置的 Socket 函数)。 我的文件如下所示:
192.168.1.1 firewall
192.168.2.4 wifi
192.168.3.10 switch
我的代码:
use strict;
use warnings;
my $input_dns_file='./file';
our %ip2host_hash;
sub read_dns_file()
{
open(DNS_FILE,'<',$input_dns_file) or die;
while ( my $line=<DNS_FILE> ){
my ($ip,$hostname) = split(/\s+/,$line,2);
$ip2host_hash{$ip} = $hostname;
}
问题是哈希总是返回文件的第一行。如何填充哈希 %ip2host 以便在我输入 IP 地址时返回每个主机名?
【问题讨论】:
-
您确定哈希包含您所说的内容吗? (使用
Data::Dumper和print Dumper(\%your_hash)查看其内容。)您所拥有的看起来不错。 -
也许您想用一个 IP 支持多个主机名?
-
未能得到您的问题,抱歉:您所说的“哈希总是返回”是什么意思?您的代码似乎很合法:您正在逐行浏览文件,填写地图...
-
另请注意,如果不是
chompingline,您最终会在每个主机名的末尾加上\n。这可能不是你想要的。 -
最好只写
my ($ip, $hostname) = split;,因为这样可以避免chomp输入记录的需要,并且还可以处理任何前导和尾随空格。
标签: perl