perl 面向对象 -> 符号使用

原创 2015年07月06日 22:34:52
-> 有两种用法,都和解引用有关。 



第一种用法,就是解引用。 
根据 -> 后面跟的符号的不同,解不同类型的引用, 
->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。 
例子: 
$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\n";
print "\$arr_ref is $arr_ref\n";
##访问数组 @array 的第一个元素
print "第一个元素是$arr_ref->[0]\n";
[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 "\n";
##定义hash引用

$hash_ref = \%hash;

##访问 %hash 的 foo 分量

$var=$hash_ref->{foo};
print "\$var is $var\n";

[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\n";
}};

$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对象变量。 

Perl面向对象编程入门

因为项目原因,接触了一门新的语言—-Perl。初识之时,觉得它既像bash shell,又像C语言。因为有C/C++/Java以及shell基础,所以这门语言上水并没有很困难,但是它的面向对象还是给了...
  • yangfangjit
  • yangfangjit
  • 2017年06月07日 22:03
  • 398

Python, Java, C++, Perl 面向对象思想比较

面对对象语言的设计哲学通常分为以下两种。 第一种思路是基类的作者定下一系列的规则,规定使用该基类的人(派生类的作者)可以干什么事,不能干什么事。 C++,和 Java 就是这一阵营的主要代表。比...
  • u012653791
  • u012653791
  • 2014年07月26日 21:18
  • 1498

perl 一个简单的面向对象的例子

jrhmpt01:/root# cat x1.pm package x1; use Data::Dumper; sub new { my $self ={}; my $invocant =...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2016年03月21日 22:01
  • 826

面向对象的Perl 之一

14.1 OOP范例 14.1.1 回顾包与模块 面向对象的编程(Object-Oriented Programming)OOP 的核心是其程序组织的方式。 诸如C ++和Java 之类的面向对...
  • fireroll
  • fireroll
  • 2013年08月13日 15:56
  • 1412

PERL各个符号代表的意思

$- 当前页可打印的行数,属于Perl格式系统的一部分 $! 根据上下文内容返回错误号或者错误串 $” 列表分隔符 $# 打印数字时默认的数字输出格式 $$ Perl解释器的进程ID $% ...
  • AnneQiQi
  • AnneQiQi
  • 2016年08月18日 15:00
  • 2579

perl的特殊符号

@       数组                            $x{}   x名字前面是美元符号($),后面是花括号({}),则其为 hash 元素 %       要引用整个 ha...
  • rgb_rgb
  • rgb_rgb
  • 2017年01月15日 00:17
  • 378

perl脚本实践例程

以下为这几天来学习perl脚本语言所写的东东,也算一部分阶段成果咯 过程中还是遇到了许多困难,幸好有网络这个好东东,从前面走过的人那里得到许多帮助 也共享出来,以期对像我一样想学perl的...
  • tiananma0607
  • tiananma0607
  • 2015年10月10日 09:12
  • 318

PERL各个符号代表的意思

$- 当前页可打印的行数,属于Perl格式系统的一部分 $! 根据上下文内容返回错误号或者错误串 $” 列表分隔符 $# 打印数字时默认的数字输出格式 $$ Perl解释器的进程ID $% 当前输出通...
  • bobcao08
  • bobcao08
  • 2016年12月04日 22:41
  • 288

为什么要用面向对象编程

转自:http://www.cnblogs.com/cj723/archive/2010/05/26/1744499.html 第一种讲法 凭什么要用面向对象来编程,不用是否可以?今天我们...
  • glb562000520
  • glb562000520
  • 2013年10月09日 10:31
  • 2011

面向对象编程基础 二 this的用法

this可以简单的理解为当前的对象,在构造对象时可以理解为对象的第一人称“我”。this一般被分为三种用法: 1、this表示对象成员变量的引用而非函数参数变量,如下面的代码 public class...
  • xinsuixiaofeiyu
  • xinsuixiaofeiyu
  • 2014年03月12日 10:25
  • 1095
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:perl 面向对象 -> 符号使用
举报原因:
原因补充:

(最多只允许输入30个字)