2013-03-22 76 views
0

這裏是代碼工作...問題是當某些網站不能採取IP,腳本停止。有什麼方法可以使腳本工作,甚至IP形式的某些網站不能被採取?我需要somting像在VB中錯誤恢復下一步...將服務器IP推入陣列

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

不要使用'我們',除非被迫。使用'my'。 – ikegami 2013-03-22 04:00:05

回答

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條件,不搞亂$_

在發佈代碼時,請發佈至少有編譯合理機會的代碼。