-> 有两种用法,都和解引用有关。
第一种用法,就是解引用。
根据 -> 后面跟的符号的不同,解不同类型的引用,
->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。
例子:
$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 面向对象之基类(use base)
Perl 面向对象之基类(use base)
Perl perl 数组 多继承 面向对象 -
Perl 教学 面向对象编程
介绍如何使用Perl的面向对象编程(OOP)特性及如何构建对象,还包括继承、方法重载和数据封装等内容。
perl cocoa java 数组 构造函数 -
面向对象的符号表示
统一建模语言
统一建模语言 对象