0

这是有效的代码...问题是当无法从某些站点获取IP时,脚本停止。是否有某种方法可以使脚本工作,即使某些站点无法获取 IP 形式?我需要像 VB On Error Resume Next 中一样的 somting...

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); }
4

1 回答 1

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;

请注意以下事项:

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

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

于 2013-03-22T00:36:39.707 回答