请教 -> 箭头符号的意义

请教 -> 箭头符号的意义

大家好,最近刚开始学习perl,但是,看到书上对“->”箭头操作符解释的不是太明白,也查了不少资料,但是,还是没有能明白过来,所以来这里请教一下。

比如:
my $first -> params -> {"user"}        这个我该如何解释?

my $second = mod -> login(login_user)   这句又如何解释?

谢谢了!
see Chapter 12: Objects in programming perl 3rd
精华区有篇文章,就是这个标题


QUOTE:
原帖由 flw 于 2008-5-14 14:27 发表
精华区有篇文章,就是这个标题

我按照你所说的方法理解了一下,大概明白了50%吧,然后在自己机器上试验,程序如下:

[Copy to clipboard] [ - ]
CODE:
#!C:/Perl/bin/perl.exe -w
my @sy = qw/list gluy hunter syu linux/;
my $su = \@sy;
$su -> [0];
print "$su\n";

但是结果却不是自己想要的:
Useless use of array element in void context at C:\DOCUME~1\computer33\桌面\tem.pl
line 6.
ARRAY(0x1829ffc)


我的理解:
把@sy数组的第一个元素赋给$su   ,请问flw,对嘛?



[Copy to clipboard] [ - ]
CODE:
$su->[0];
print "$su\n";

改成:

[Copy to clipboard] [ - ]
CODE:
print $su->[0], "\n";

或者

[Copy to clipboard] [ - ]
CODE:
$foo = $su->[0];
print "$foo\n";

把$su->[0]赋值给$foo之后,对了。

是这样的吧: $su->[0],只是取得了@sy的元素坐标,而并没有直接赋值给$su,也就相当于$su并没有直接的值。



我还有个小小问题:
如果按照这样来做的话有什么优势?
比如,我访问数组的时候,可以使用$sy[0] 也就可以了,而调用子例程的时候,使用&sub ,不是跟简单嘛? 反而使用->变得复杂了呢。


QUOTE:
原帖由 tener 于 2008-5-14 16:06 发表
把$su->[0]赋值给$foo之后,对了。

是这样的吧: $su->[0],只是取得了@sy的元素坐标,而并没有直接赋值给$su,也就相当于$su并没有直接的值。



我还有个小小问题:
如果按照这样来做的话有什么优势? ...

整个perl的obeject都是建立在reference的基础上的
简单一点你就把reference看成是c里面的指针好了
指针有啥好处自己去想吧

还有你平常的foreach循环里面的$_
subroutine 里面的@_其实都是reference



QUOTE:
原帖由 tener 于 2008-5-14 16:06 发表

如果按照这样来做的话有什么优势?

这个问题问得很好!
优势就是:
引用是标量!
是标量,就会有很多标量才有的特性,比如:
1,hash 的 key 和 value 只能是标量。Perl 藉此来实现复杂的数据结构(包含 hash 的数组,包含数组的 hash,由包含数组的 hash 组成的数组,二维数组,等等)
这也就是 Perl 引入引用的最大理由。
2,sub 调用时的参数传递。直接传递数组和 hash,不仅效率低,而且也会展开数组和 hash,第一个 hash 或者数组之后的其余参数无法分辨。(这个虽然可以通过 sub 原型来解决,但 sub 原型的实质仍然是引用)
还有其它的许多好处,太忙,就不仔细说了。欢迎大家补充。

哦,好像越来越深奥了,呵呵
还是多深造深造先,谢了