标量变量和表-1
时间:2008-07-03 来源:lvDbing
基本概念
编程是处理数据以产生出任意的输出,比如大家最为熟悉的“Hello World”程序,也要与数据打交道,显示一个字符串。数据操作是编程的基础,完整理解Perl编程的最初步骤就是理解Perl怎么使用和处理数据。
Perl处理的两种类型的数据:标量和表。标量存储了单一个的数据项,而表则包含了多个数据项。虽然标量是实际的数据类型,也就是,可以将数据分配给它并存储起来,但在Perl里,却没有“表”这样的数据类型。标量和表之间的差异一种工作环境而非数据类型。
Perl知道你当前是工作在标量环境下还是表环境中,很多Perl函数和运算符对工作环境非常敏感。例如:如果代码在表环境中使用了函数或运算符,就有可能将它的返回值赋给表;这样Perl就会知道你期望得到表数据项,如果函数是在标量环境中使用的,Perl就知道你需要标量数据项。
与标量不同的是,在Perl中并不能得到实际的表数据类型。也就是说没有什么存储类型的名字叫做表。在编写代码让它一次同时处理多个(而非单独一)数据项时,就是使用表,使用表语法。例如,给标量分配数据可能就像这样:
$x = 1;
而给表赋值可能就像这样(注意括号的用法,它表明我们正在使用表):
($x,$y) = (1, 2);
理解的要点是在代码中一次处理了多个数据项,这就是使用表,使用表仅仅是编写代码的技巧。表并不代表像标量那样的数据存储格式。理解这一点对在Perl中使用数据是非常基本的。实际上,Perl只有3种不同的数据格式:标量、数组和哈希表(也称为关联数组,哈希表的工作原理很像以字符串为下标的数组)。
标量
标量在很多编程语言中被用作最简单的变量。它们存储了单独一个数据项:数字、字符串,或Perl引用。标量之所以这样命名,是为了将它们与能够存储多项的结构如数组区分开来。
在标量名的前面使用$号。在Perl术语里,$是标量的前缀,使用它来表示标量意味着Perl知道如何对待标量,而且,标量名就不会与Perl的保留字冲突。
标量的两种数据类型是数字和字符串,给标量赋值时使用“=”运算符,如下:
$scalar1 = 1;
$scalar2 = "Hello World";
也可以在Perl的运算符和函数里使用标量。所用的运算符和函数通常取决于标量数据是数字还是字符串。需要记住,标量代表了存储数据项的实际内存位置:字符串或数字。这些变量是Perl存储的数据项的最基本单元。
表
顾名思义,表就是数据元素的列表。那些元素并不一定是标量数值。它们本身可以是数组或哈希表,甚至可以是其他表。
前面提到过,与标量不同的是,并没有数据类型。注意,在Perl里,表的概念是非常重要的,表也是将数据元素联系起来的结构,可以通过把那些项放在括号中并用逗号分隔开的方法来指明表。下面的例子使用print函数打印表中的元素("H","e","l","l","o"),print函数可接受表作为变量表:
print ("H","e","l","l","o");
Hello
注意,在这种情况下,并没有在打印之前把表("H","e","l","l","o")赋给变量,因为Perl并不需要显式的表变量类型。
也可以在使用表时省掉括号,前提是并不需要它们来指明想要工作在表上下文,而且这样也不会造成混淆。下面例子中,把"H","e","l","l","o"传递给print函数:
print "H","e","l","l","o";
Hello
Perl中的函数分成两组:一组期望标量作为变量,而另一组则希望变量为表。
标量和表工作环境
Perl是怎么知道什么时候把数据看作标量,什么时候把它们看作表的呢?Perl是基于程序工作环境作出决定的,两个最重要的工作环境就是:标量环境和表环境(标量环境也可以细分为:数字环境和字符串环境)
换句话说,如果Perl预期使用表(正如你使用只能接收表的函数),它就会将数据看作是表。如果它预期使用标量,它就会将数据看作是标量。实际上,这意味着你必须了解哪些函数是标量函数,而哪些是表函数。
又换另外一句话说,在Perl编程中,数据会被怎样看待成隐式的,它取决于使用这个数据时所处的工作环境,而不是代码中明确设置。例如,如果正在使用接收和返回表变量的函数,那些变量就会被自动当成是表。
在标量环境中,表可以变成标量,而在表环境中,标量经常变成元素的表。然而在Perl中,没有任何规则指定了表达式在表环境中的行为应该如何,而在标量环境下应该如何,或是其他什么别的工作环境的行为。例如,当转换到标量环境时,一些运算符仅仅返回了表的长度,而其在表环境中是应该返回整个表的;一些返回表的第一个数值;一些返回表的最后一个数值;
也可以明确指出希望使用表环境,只要将表放在括号里即可,或者强制要求标量环境使用标量函数。
《Perl技术内幕》学习笔记 --- CU-吖漆(lvDbing)
相关阅读 更多 +