zoukankan      html  css  js  c++  java
  • eval 函数防止程序崩溃

    use HTTP::Date qw(time2iso str2time time2iso time2isoz);  
    use Net::Ping;  
    use Socket;  
    use encoding 'euc_cn'; 
    my @array=( "api.weixin.qq.cm"  
                 );  
    while (1==1){  
    my $CurrTime = time2iso(time());  
            foreach $host (@array){  
            $p = Net::Ping->new("icmp" );  
      $ip_addr=gethostbyname($host);
     
      print "$ip_addr is $ip_addr
    ";
      #eval {$packed_ip_addr= inet_ntoa($ip_addr)};  
       $packed_ip_addr= inet_ntoa($ip_addr);  
        print "$packed_ip_addr is $packed_ip_addr
    ";
      if ($p->ping($host,2)) {  
            open (A, ">>ping.log");  
            (  
    print A ("$CurrTime---$packed_ip_addr is active.
    ")  
      
    )} else  
    {  
     open (B ,">>ping.log");  
           (  
    print B ("$CurrTime---$host is lost.
    ") ,print "$host is lost.
    "  
    )  
    }  
    sleep(5)        
    }}
    
    }
    
    正常情况:
    D:>perl ping.pl
    "x{fffd}" does not map to euc-cn at ping.pl line 13.
    $ip_addr is gx{fffd}$
    $packed_ip_addr is 103.251.36.235
    "x{fffd}" does not map to euc-cn at ping.pl line 13.
    $ip_addr is gx{fffd}$
    $packed_ip_addr is 103.251.36.235
    api.weixin.qq.cm is lost.
    "x{fffd}" does not map to euc-cn at ping.pl line 13.
    $ip_addr is gx{fffd}$
    $packed_ip_addr is 103.251.36.235
    
    
    异常:
    use HTTP::Date qw(time2iso str2time time2iso time2isoz);  
    use Net::Ping;  
    use Socket;  
    use encoding 'euc_cn'; 
    my @array=( "api.weixin.qq.cz"  
                 );  
    while (1==1){  
    my $CurrTime = time2iso(time());  
            foreach $host (@array){  
            $p = Net::Ping->new("icmp" );  
      $ip_addr=gethostbyname($host);
     
      print "$ip_addr is $ip_addr
    ";
      #eval {$packed_ip_addr= inet_ntoa($ip_addr)};  
       $packed_ip_addr= inet_ntoa($ip_addr);  
        print "$packed_ip_addr is $packed_ip_addr
    ";
      if ($p->ping($host,2)) {  
            open (A, ">>ping.log");  
            (  
    print A ("$CurrTime---$packed_ip_addr is active.
    ")  
      
    )} else  
    {  
     open (B ,">>ping.log");  
           (  
    print B ("$CurrTime---$host is lost.
    ") ,print "$host is lost.
    "  
    )  
    }  
    sleep(5)        
    }}
    
    
    D:>perl ping.pl
    $ip_addr is
    Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
    5.
    
    D:>
    
    
    一个正常(或能正确解析)的 domain, inet_aton() 会回传 4 个字符 chr 0-255
    但如果是不能解析的话, 就会回传 0.
    
    
    Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
    
    
    回传0了
    
    此处加上eval 就是防止程序崩溃
    
    
    use HTTP::Date qw(time2iso str2time time2iso time2isoz);  
    use Net::Ping;  
    use Socket;  
    use encoding 'euc_cn'; 
    my @array=( "api.weixin.qq.cz"  
                 );  
    while (1==1){  
    my $CurrTime = time2iso(time());  
            foreach $host (@array){  
            $p = Net::Ping->new("icmp" );  
      $ip_addr=gethostbyname($host);
     
      print "$ip_addr is $ip_addr
    ";
      eval {$packed_ip_addr= inet_ntoa($ip_addr)};  
      # $packed_ip_addr= inet_ntoa($ip_addr);  
        print "$packed_ip_addr is $packed_ip_addr
    ";
     }
     sleep(3);
     }
    
    D:>perl ping.pl
    $ip_addr is
    $packed_ip_addr is
    $ip_addr is
    $packed_ip_addr is
    
    -------------------------------------------------------------------
    
    use HTTP::Date qw(time2iso str2time time2iso time2isoz);  
    use Net::Ping;  
    use Socket;  
    use encoding 'euc_cn'; 
    my @array=( "api.weixin.qq.cz"  
                 );  
    while (1==1){  
    my $CurrTime = time2iso(time());  
            foreach $host (@array){  
            $p = Net::Ping->new("icmp" );  
      $ip_addr=gethostbyname($host);
     
      print "$ip_addr is $ip_addr
    ";
      # eval {$packed_ip_addr= inet_ntoa($ip_addr)};  
       $packed_ip_addr= inet_ntoa($ip_addr);  
        print "$packed_ip_addr is $packed_ip_addr
    ";
     }
     sleep(3);
     }
    
    D:>perl ping.pl
    $ip_addr is
    Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
    5.
    
    
    没有eval,程序崩溃 print "$packed_ip_addr is $packed_ip_addr
    ";没有执行
    
    
    
    
    
    
    

  • 相关阅读:
    oracle:wm_concat函数与oracle版本
    “default关键字”与“序列化传输”的注意事项
    silverlight:利用telerik中的zip类对字符串进行压缩、解压
    引爆点不是坏事
    Liked:基于FriendFeed API的信息过滤器
    器物的改变
    让Blog成为一个中心?
    环球企业家《信息网站的未来》
    The readings, filtered by social network!
    0509·刘未鹏的TopLanguage聚会[一]
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351826.html
Copyright © 2011-2022 走看看