zoukankan      html  css  js  c++  java
  • perl 面向对象 -> 符号使用

    -> 有两种用法,都和解引用有关。 
    
    
    
    第一种用法,就是解引用。 
    根据 -> 后面跟的符号的不同,解不同类型的引用, 
    ->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。 
    例子: 
    $arr_ref = @array; 
    $arr_ref->[0] 访问数组 @array 的第一个元素。
    --------------------------------------------------------
    [root@master ~]# cat 1.pl 
    @array = qw/1 2 3 4 5/;
    ##创建数组引用
    $arr_ref = @array; 
    print "@array is @array
    ";
    print "$arr_ref is $arr_ref
    ";
    ##访问数组 @array 的第一个元素
    print "第一个元素是$arr_ref->[0]
    ";
    [root@master ~]# perl 1.pl 
    @array is 1 2 3 4 5
    $arr_ref is ARRAY(0x1512398)
    第一个元素是1
    
    --------------------------------------------------------
     
    $hash_ref = \%hash; 
    $hash_ref->{foo} 访问 %hash 的 foo 分量 
    
    --------------------------------------------------------
    [root@master ~]# cat 2.pl 
    %hash=('foo',1,'b',2); 
    print  %hash;
    print "
    ";
    ##定义hash引用
    
    $hash_ref = \%hash;
    
    ##访问 %hash 的 foo 分量
    
    $var=$hash_ref->{foo};
    print "$var is $var
    ";
    
    [root@master ~]# perl 2.pl 
    b2foo1
    $var is 1
    
    --------------------------------------------------------
    
    
    $sub_ref = &test; 
    $sub_ref->(1, 2, 3) 使用参数列表 (1,2,3) 来调用 &test 这个子程序。 
    
    -------------------------------------------------------
    [root@master ~]# perl 3.pl 
    $max is 2
    $max is 3
    [root@master ~]# cat 3.pl 
    sub test {  
    $max = shift(@_);  
    for my $item (@_) {  
    $max = $item if $max < $item;  
    print "$max is $max
    ";
    }};
    
    $sub_ref = &test;  
    $sub_ref->(1, 2, 3) ;
    [root@master ~]# perl 3.pl 
    $max is 2
    $max is 3
    ----------------------------------------------------------
    
    
    第二种用法,就是调用类或者对象的方法。 
    格式: 
    $obj->method(); 
    或者 
    ClassName->method(); 
    例如: 
    $pop3->login( $username, $password ); 
    my $ftp = Net::FTP->new("some.host.name", Debug => 0); 
    这两种用法略有不同, 
    但是总的来说,符合以下规则: 
    引用:[color=red]假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是: 
    
    if ( ref $left 有效 ){    # 也就是说 $left 是个引用,而不是个裸字
    
        $ClassName = ref $left;  # 取引用的类型,当作类名称
    
    }
    
    else{
    
        $ClassName = $left;       # 直接把裸字当作类名称
    
    }
    
     $p = Net::Ping->new("icmp");     ---创建对象
      if ($p->ping($host,2))          ----调用对象的方法
    
    Net::Ping->new([$proto [, $def_timeout [, $bytes [, $device [, $tos ]]]]]); 
        新建了一个Net::Ping对象。第一个参数($proto)为协议值,共有六种选择:TCP、UDP、ICMP、STREAM、SYN、EXTERNAL,默认值为TCP
    
    
    
    主要方法: 
    ------------------------------------------------------------------------------------------------------ 
    Net::Ping->new([$proto [, $def_timeout [, $bytes [, $device [, $tos ]]]]]); 
        新建了一个Net::Ping对象。第一个参数($proto)为协议值,共有六种选择:TCP、UDP、ICMP、STREAM、SYN、EXTERNAL,默认值为TCP;第二个参数为默认超时值($def_timeout),以秒为单位,设置
    
    此值是为了定义PING方法的超时值,默认为5秒;发送包的数据大小($bytes)会根据你选择的协议不同而有不同的结果,当你选择的协议为TCP时系统忽略此值,当协议为UDP时此值默认为为1(最小值),
    
    其他类型则为0,此值可以选择的最大值为1024;设备选项($device)为输出设备接口;服务类型Type of service($tos)通常可以忽略。可以使用无参数方式调用此方法。调用此方法后的返回值为一个
    
    Net::Ping对象变量。 

  • 相关阅读:
    Docker 实战(2)- 在 Jenkins 容器上的搭建持续集成环境和完成自动化测试
    Docker
    Jenkins(9)- 汉化 Jenkins 网站
    Docker 实战(1)- 使用 Jenkins 镜像创建容器,并搭建 Python + Pytest +Allure 的自动化测试环境
    Python
    Docker
    Linux
    Docker(20)- docker rmi 命令详解
    Docker(19)- docker pause/unpause 命令详解
    Docker(18)- docker kill 命令详解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351553.html
Copyright © 2011-2022 走看看