|
- 在Perl中,大家都知道有多种常见的变量数据类型,标量(scalar),数组(array),
- 散列(hash),另外还有reference,typeglob,undef
- 但是,你们知道有还有常量的数据类型吗?
- 比如:use constant PI => 3.1415926;定义的常量
- print PI;试试
- (1,2,3,4);定义的列表
- print (1,2,3,4)[2]看看结果是什么?
- 可能很多人对 $,@,% 非常了解了,但是却不知道他们
- 的真正的意思,大多数的书本上会介绍说,这些是表示被赋值的数据类型,他们认为
- $scalar = 'adf';
- @array = (1,2,3);
- %hash = (1=>2,3=>4);
- 这样才是正规的赋值方法,但是却不是
- 其实,'adf'是一个常量,是字符常量,(1,2,3)是一个列表,也是常量,你无法对修
- 改她的,(1=>2,3=>4)这个格式有一点特殊,而且我也不知道是什么名字,但是她其实
- 是一种含有偶数个元素的数组的变形,而且必须是偶数的个数的数组(所有才有了=>的
- 变形,来约束一些条件),也是常量,hash很多时候也被翻译为哈希数组的,其实%hash
- = (1,2,3,4)也是正确的,所以前面的$,@,%只是分别表示名称为scalar,array,
- hash的变量的数据类型分别是标量,数组,散列,他并不表示后面的'adf'是标量,
- (1,2,3)是数组,(1=>2,3=>4)是散列,好像就讲不通了
- 下面举一个例子:
- @array = 1;
- 他表示把 1 赋给了一个数组,所以,因为我们不能够直接对一个常量 1 访问(也就是要
- 指定他的内存基址了),所有我们要借用变量来达到目的,这里就是借用了一个数组做中介
- $array[0]就可以了,当然在$array = 1;中,你是借用了标量做中介的,也可以,但是
- 他并不是说 1 是标量(应该是常量),其实他与$array的类型也不一样,经过了类型转换
- 但是,在 @array = 1; 的情况下,我们不会使用标量的访问方法来访问他,因为 1 和标
- 量根本没有任何联系。
复制代码 |
|