perl的变量和括号
perl中的括号很有意思,各种括号开始的时候真有些让人有点迷糊。但是渐渐地会发现,这里面都是有规律的。
一. perl基础的变量有标量(SCALAR)、数组(ARRAY)、哈希(HASH)。
- 标量的标识符是以 $ (scalar)开头,可以表示数字或字符串,如:
$a=1;$b='abc';
- 数组的标识符是以 @(array)开头,用来表示一系列类型相同的变量如:
@a=(1,2,3);@b=(’a','b','c');
注意!后面使用的是圆括号。取值使用下标,如 a[0]。这里取值时前面是 ,可以这样理解:因为取得的值是一个标量。而下标处用的是方括号,这个值得注意下。 - 哈希的标识符是以 % 开头,用来表示一系列键值对。可以用数组的方式定义,也可以使用=>方式,如下:
%a=('a',1,'b',2);%b=('a'=>1,'b'=>2);
注意,这里也是圆括号。访问值和数组差不多,$a{‘a’}。这里key使用的是花括号。
其实,数组、哈希的括号也有一定的规律,挺有意思的。直接定义时都使用(),而访问则分别用[]和{}。
另外后面讲到的匿名存储中的匿名数组和匿名哈希也是分别用[]和{}来定义的。
二. 引用
对于熟悉c/c++的来说,引用应该比较熟悉。在很多场合下使用引用传值,能在很大程度上提高代码的运行效率。
那么如何定义一个引用呢?
其实很简单,在变量名前加一个”/”就可以了,如:
$ra=\$a;$rb=\@b;$rc=\%c;
变量名前面依然是
。而得到的引用是不能直接当做变量使用,需要解引用。解引用的方法是在变量名前加上变量原本类型所对应的符号。比如
rb是对一个数组的引用,那为了得到数组,就可以使用@
rb来得到整个数组。可以通过两种方式访问数组中数据,一种是
rb[1],另一种是使用“−>”符号
rb->[1]。明显第二种方式更加简洁。对哈希的操作类似$$rc{a},$rc->{a}。
三. 匿名存储
匿名数据结构也是经常用到的,比如在useragent的post方法中会传递一个匿名的hash表。
匿名数组的创建不再是使用 (),而是[];同样匿名hash使用{}创建,而不是()。注意,它返回的是引用!
ra=′a′=>1,′b′=>2;
ra->{a}=3;print $$ra{a};