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
    ";没有执行
    
    
    
    
    
    
    

  • 相关阅读:
    剑指offer-二维数组中的查找 java实现
    Matlab2015b激活失效解决办法
    解决ueditor在多图上传的时候偶尔抽风,图片丢失或者乱序
    用.net正则去除所有的html源码或者提取出图片地址以及存数据库时的符号替换(如富文本编辑器)
    DropDownList的动态绑定方法(两种)
    Ueditor使用说明(包括设置其可编辑不可编辑)
    用webuploader上传图片并预览(上传文件)
    .net日期控件(全.net)
    代码注释
    面向对象的概念
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351826.html
Copyright © 2011-2022 走看看