Perl中"—>"箭头的意义及用法
来源:互联网 发布:自动组词软件 编辑:程序博客网 时间:2024/06/05 18:35
看师兄的程序,里面用了很多箭头->。很长时间没有使用perl编程了,很多基本概念忘记了。在网上搜了很久,终于找到比较靠谱的答案。
cited from http://write.blog.csdn.net/postedit flw的回答。有部分增改。
-> 有两种用法,都和解引用有关。
第一种用法,就是解引用。根据 -> 后面跟的符号的不同,解不同类型的引用,
->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。
例子:
$arr_ref = \@array;
$arr_ref->[0] 访问数组 @array 的第一个元素。
$hash_ref = \%hash;
$hash_ref->{foo} 访问 %hash 的 foo 分量
$sub_ref = \&test;
$sub_ref->(1, 2, 3) 使用参数列表 (1,2,3) 来调用 &test 这个子程序。
第二种用法,就是调用类或者对象的方法。
格式:
$obj->method();##简单来说,就是函数表示的一种。等价于method($obj)
或者
ClassName->method();
例如:
$pop3->login( $username, $password );
my $ftp = Net::FTP->new("some.host.name", Debug => 0);
这两种用法略有不同,
但是总的来说,符合以下规则:
引用:假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是:
if ( ref $left 有效 ){ # 也就是说 $left 是个引用,而不是个裸字 $ClassName = ref $left; # 取引用的类型,当作类名称}else{ $ClassName = $left; # 直接把裸字当作类名称}
然后调用:
&{$ClassName::$right}( $left, 原参数列表 )
也就是说把类名称和右操作数拼在一起,当作子程序名称(Perl 解释器要做的工作其实要比这复杂,它还要考虑到继承的问题),并把左操作数当作第一个参数。
附加:perl中的“指针”。箭头不是指针!!
引自:Perl语言中的“指针”用法解析_架构设计_技术方案_中国软件网 http://tech.soft6.com/664/8/35840.html
在C语言中,指针(地址)的使用给我们带来了很大的方便,但是在Perl语言中没有直接提供这样的数据类型,在某些情况下就存在一些很不方便的地方。
在调用函数时,如果参数值和返回值比较多,而且非常复杂的时候,仅仅是参数栈或返回值栈是不够用的。这时候,有两种解决方法,一种是使用引用调用,这样可以传递象数组、哈希数组一类的数据,另外一种就是我要着重介绍的“指针”,主要用来传递复杂的结构,例如多维数组。多维数组指针的创建
Perl语言中多维数组指针的创建非常简单,具体语句如下:
my$multi_array=[];
这时,$multi-array就是一个指针,它的内容是undefined.下一步我们要给它赋值,语句如下:
@{$multi_array}=((a,...,z),(1,...,10),($a,...,$xx));
这时,$multi-array就成了一个指向二维数组的指针,当然,如果必要的话,你可以定义更多的维数。如何使用这个二维数组的元素呢?
$multi_array->[0][1]#数组第一维,第二个元素
如何使用一行元素呢?
@{$multi_array->[0]}#二维数组的第一行元素
这样,你就可以方便的借助指针使用多维数组了。标量$multi_array就象一个普通的标量,在函数调用和返回时,就可以直接使用了。
- Perl中"—>"箭头的意义及用法
- Android中WebView的意义及用法
- Android中Service的意义及用法
- Android中SQLite的意义及用法
- Android中ContentProvider的意义及用法
- java 中super 的用法及意义
- perl的箭头
- volatile的意义及用法
- explicit的用法及意义
- _T()的用法及意义
- _T()的用法及意义
- AIDL的意义及用法
- php中$_SERVER变量的意义及用法说明
- JavaScript中apply与call的用法意义及区别
- PHP中双冒号::的用法及意义
- java 中super方法的用法及意义
- JavaScript中apply与call的用法意义及区别
- OpenGL中相关函数的意义及用法
- C++百钱白鸡问题
- C++实验2
- Kafka安装配置及简单通道传输操作(kafka2.9.2)
- Maximum Subarray 解题
- iOS Client 与WebSocket 通信(二)
- Perl中"—>"箭头的意义及用法
- 前端学习 HTML、CSS、JS基础
- 【opencv】ndk编译opencv源码
- 7。强转换
- top scrollTop offsetTop等对比
- 为什么我要成为最佳(一)
- Java 参数检查
- 小米笔试-懂二进制
- APK动态加载框架(DL)解析