tener
请教 -> 箭头符号的意义
大家好,最近刚开始学习perl,但是,看到书上对“->”箭头操作符解释的不是太明白,也查了不少资料,但是,还是没有能明白过来,所以来这里请教一下。
比如:
my $first -> params -> {"user"} 这个我该如何解释?
my $second = mod -> login(login_user) 这句又如何解释?
谢谢了!
tener
[quote]原帖由 [i]flw[/i] 于 2008-5-14 14:27 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8377222&ptid=1098567][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
精华区有篇文章,就是这个标题 [/quote]
我按照你所说的方法理解了一下,大概明白了50%吧,然后在自己机器上试验,程序如下:
[code]#!C:/Perl/bin/perl.exe -w
my @sy = qw/list gluy hunter syu linux/;
my $su = /@sy;
$su -> [0];
print "$su/n";[/code]
但是结果却不是自己想要的:
Useless use of array element in void context at C:/DOCUME~1/computer33/桌面/tem.pl
line 6.
ARRAY(0x1829ffc)
我的理解:
把@sy数组的第一个元素赋给$su ,请问flw,对嘛?
[[i] 本帖最后由 tener 于 2008-5-14 15:37 编辑 [/i]]
churchmice
[quote]原帖由 [i]tener[/i] 于 2008-5-14 16:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8378265&ptid=1098567][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
把$su->[0]赋值给$foo之后,对了。
是这样的吧: $su->[0],只是取得了@sy的元素坐标,而并没有直接赋值给$su,也就相当于$su并没有直接的值。
我还有个小小问题:
如果按照这样来做的话有什么优势? ... [/quote]
整个perl的obeject都是建立在reference的基础上的
简单一点你就把reference看成是c里面的指针好了
指针有啥好处自己去想吧
还有你平常的foreach循环里面的$_
subroutine 里面的@_其实都是reference
[[i] 本帖最后由 churchmice 于 2008-5-14 16:23 编辑 [/i]]
flw
[quote]原帖由 [i]tener[/i] 于 2008-5-14 16:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8378265&ptid=1098567][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
如果按照这样来做的话有什么优势? [/quote]
这个问题问得很好!
优势就是:
[color=red]引用是标量![/color]
是标量,就会有很多标量才有的特性,比如:
1,hash 的 key 和 value 只能是标量。Perl 藉此来实现复杂的数据结构(包含 hash 的数组,包含数组的 hash,由包含数组的 hash 组成的数组,二维数组,等等)
这也就是 Perl 引入引用的最大理由。
2,sub 调用时的参数传递。直接传递数组和 hash,不仅效率低,而且也会展开数组和 hash,第一个 hash 或者数组之后的其余参数无法分辨。(这个虽然可以通过 sub 原型来解决,但 sub 原型的实质仍然是引用)
还有其它的许多好处,太忙,就不仔细说了。欢迎大家补充。
[[i] 本帖最后由 flw 于 2008-5-14 16:50 编辑 [/i]]