将服务器IP推送到阵列中

时间:2013-03-22 00:23:50

标签: perl loops

这里的代码是有效的...问题是当从某个站点无法取IP时,脚本停止。是否有某种方法使脚本工作甚至IP形式某些网站无法采取?我需要像VB On Error Resume Next ...

一样
our $file = abs_path("site.txt");

open (FH, "< $file") or die "Can't open $file for read: $!";
our @lines;
while (<FH>) {
    chomp($hostname="$_"); #change this to your hostname
our($addr)=inet_ntoa((gethostbyname($hostname))[4]);
our @newarr;
push(@newarr,$addr); }

1 个答案:

答案 0 :(得分:0)

Perl的异常处理机制是eval

我会重新编写您的代码(未经测试),如下所示:

use strict;
use warnings;

use Socket;

my $file = 'test.txt';

open my $fh, '<', $file
    or die "Can't open $file for read: $!";

my @addr;

while (my $hostname = <$fh>) {
    last unless $hostname =~ /\S/;
    $hostname =~ s/\s+\z//;

    my $ip = gethostbyname $hostname;
    $ip = defined($ip) ? inet_ntoa $ip : '';

    push @addr, [$hostname, $ip];
}

close $fh
    or die "Cannot close '$file': $!";

use YAML;
print Dump \@addr;

请注意以下事项:

  • Bareword文件句柄是包全局
  • our变量具有包范围
  • 如果您要将<$fh>的返回值分配给变量,请在while条件下执行此操作,而不要弄乱$_

发布代码时,请发布至少有合理编译机会的代码。