LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1093|回复: 10

请问->的用法?

[复制链接]
发表于 2004-4-29 21:44:18 | 显示全部楼层 |阅读模式
请大家指教,最后能有点简单的例子。。
发表于 2004-4-29 21:51:30 | 显示全部楼层
1、如果
$array = [1, 2, 3, 4];
那么@{$array} 就等于(1, 2, 3, 4)。
${$array}[3]就等于4。
但是${$array}[3]难读又难写,所以就用$array->[3]代替。
 楼主| 发表于 2004-4-29 21:57:18 | 显示全部楼层
谢谢!!能用在关联数组上吗?
发表于 2004-4-29 21:58:11 | 显示全部楼层
2、如果
@array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);
那么@{$array[1]}就等于(4, 5, 6),$array[1]->[2]就等于6。
perl规定你可以省略两个方括号之间的->,所以$array[1]->[2]可以简写为$array[1][2]。
发表于 2004-4-29 22:12:11 | 显示全部楼层
谢谢!!能用在关联数组上吗?


当然可以。
3、如果
$hashr = { 'black' => '黑', 'white' => '白'};

那么 $hashr->{'black'} 就等于'黑'。
 楼主| 发表于 2004-4-29 22:22:41 | 显示全部楼层
thank
发表于 2004-4-29 22:51:36 | 显示全部楼层
最初由 BBDD 发表
1、如果
$array = [1, 2, 3, 4];
那么@{$array} 就等于(1, 2, 3, 4)。
${$array}[3]就等于4。
但是${$array}[3]难读又难写,所以就用$array->[3]代替。

->在perl里是个"指向符",这个我知道一点不过:
如果:
$array = [1, 2, 3, 4];
那么:
print $array应该是什么?:ask
我测试结果:
/home/javalee/test#perl -e '$array = [1, 2, 3, 4];print $array'
ARRAY(0x804c00c)/home/javalee/test#perl -
$array = [1, 2, 3, 4];print $array;__END__
ARRAY(0x804c00c)/home/javalee/test#
/home/javalee/test#perl -e '$array = [1, 2, 3, 4];print $array->[3]'
4/home/javalee/test#
这个怎么解释呢?:thank
 楼主| 发表于 2004-4-29 22:54:57 | 显示全部楼层
最初由 javalee 发表

/home/javalee/test#perl -e '$array = [1, 2, 3, 4];print $array'
ARRAY(0x804c00c)/home/javalee/test#


这样好象是把内存的首地址打印出来了。。:help :help
发表于 2004-4-29 23:27:09 | 显示全部楼层
好像是二维数组。
不懂,:help
:p
发表于 2004-4-30 09:25:25 | 显示全部楼层
Perl的引用和C的指针差不多,[...]{...},构造符并不是最常用的,看下面,->就是组成$$的第一个$
/home/javalee/test#perl -e '$array = [1, 2, 3, 4];print $array'
ARRAY(0x804c00c)/home/javalee/test#
ARRAY是引用的类型,可以使用ref()来获得,0x804c00c是内存基址


#!/usr/bin/perl
use strict;
#使用硬引用,直接指向原来数据的地址
my $onenum = 1;
my $scalar = \$onenum;
print "\$scalar 的引用类型:".ref($scalar)."\t值为$scalar"."\n";
my @array = \(1,2,3,4);
#某些人,不要再说这里错了,她等价与 @array = (\1,\2,\3,\4); Perl的东西,很多人永远都学不会,太高深了,所以我不敢大放阕词,如果你得到高手的证明,可以察看《Perl高级编程》第125页
print "\@array 的引用类型:".ref(@array)."\t\${\$array[1]}的值为{$array[1]}"."\n";
#更改一个元素的值,将更改原先地址中值
#重新设置值
$$scalar = 2;
print "更改以后的值为$scalar"."\n";
print "被更改的$onenum的值为onenum"."\n";

#使用复制引用,复制引用是产生副本的
my @nums = (1,2,3,4);
my $array2 = [@nums];
print "\$array2 的引用类型:".ref($array2)."\t值为array2->[1]"."\n";

#更改一个元素的值,不更改原先地址中值
#重新设置值
$array2->[1] = 8;
print "重新设置值以后,值为array2->[1]"."\n";
print "被引用的数组中元素,值为nums[1]"."\n";
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表