2007年4月25日星期三

《Learning Perl》学习笔记 -- 第二章 标量数据

这章介绍了Perl语言中标量数据的概念、应用于标量数据的操作符及if和while两种控制结构。

1.标量(Scalar)数据的概念
在Perl中,单个的数字和单个的字符串都被视为标量数据,而在其它一些编程语言中,字符串被视为字符数组(譬如C语言中)。
1.1 数字标量
Perl中的数字没有整型、浮点型的区别,在Perl的内部统一用浮点型表示,对于用户来说,感觉不到差别。
八进制直接量以0开头,十六进制以0x开头,二进制以0b开头。
1.2 字符串标量
字符串是字符的序列,字符串中可以包含任意字符的组合。在Perl中表示字符串有两种方式:单引号字符串和双引号字符串。字符串是放在单引号'(或双引号")之间的字符序列;单引号'(或双引号")本身并不是字符串的一部分,它们只是让Perl确定字符串的开始与结束。
1.2.1 单引号与双引号在字符串标量中的区别
在单引号间,除了单引号和反斜杠以外的任何字符在字符串中表示该字符本身;
在双引号间,则可以使用反斜杠转义字符及变量替换。
所以,若想获得纯粹的字符串,可以使用单引号;若想使用反斜杠转义字符或变量替换,则使用双引号。
1.2.2 变量替换
当把一个字符串用双引号括起来时,就要对它进行变量替换(除了要检查反斜杠转义符以外)。也就是说,字符串中的所有标量变量名都将被替换为它的当前值。
如果只有一个变量,则不必使用替换,下面两个语句的功能是相同的:
print "$var";
print $var;
1.3 数字与字符串的转换
数字转换为字符串:直接在数字上加上单引号或双引号即可,譬如把数字37变成字符串,37-->"37"。
字符串转换为数字:直接去掉单引号或双引号,并去掉非数字字符,如第一个字符不是数字,则转换后,该数字为0。譬如"37jerry"转换为数字后,变成37;"jerry"转换为数字后,变成0。
1.4 标量变量
标量变量以$开头,后跟文字(字母和数字)和下划线,但不能以数字开头。
在Perl中,变量在第一次赋值前有特别的undef值,这个值对于数字来说,相当于0;对于字符串来说,相当于空串。所以在Perl中,相当于对定义的变量已经进行了初始化,不必担心由于未初始化而出现的一些错误。

2.操作符
2.1 数值操作符
包括常规的+,-,*,/,%(求模),**(求幂)等操作符。
2.2 字符串操作符
字符串可以用.操作符连接起来。
串重复操作符x(小写字母x):这个操作符取它左边的操作数(一个字符串),生成连续的拷贝,重复次数由它右边的操作数(一个数字)决定。譬如,"fred"x2="fredfred";
2.3 二元赋值运算符
和C语言类似,Perl中有二元赋值运算符,譬如+=,*=等。
2.4 比较操作符
比较数字:<, <=, ==, >=, >, !=。
比较字符串:lt,le,eq,ge,gt,ne(含义和上面的数字比较符对应)。

3.控制结构
3.1 if控制结构
if () {};
if () {}; else {};
3.1.1 if控制结构中条件判断的真假问题(布尔值)
几条规则:
特殊值undef是假;
0是假,其它的数字全为真;
空串('')是假,其它的字符串一般是真;
一个例外:因为数字和字符串是等价的,所以0的字符串形式,'0',和它的数值形式有同样的值:假。这点是和C语言有区别的地方。
总结:标量值为undef,0,'',或'0'时,为假;所有其它的标量都为真。
3.2 while控制结构
while(){};

4.有用的函数
4.1 取得用户输入
使用行输入操作符:$line = ;
$line是自己定义的标量变量,Perl以换行符判断一个行输入的结束,同时换行符也会存储在变量$line中。
4.2 chomp操作符
chomp作用于字符串,用于去掉字符串结尾的换行符且只能去掉一个,如果该字符串末尾不是换行符,则chomp什么也不做。
chomp($line);
chomp $line; #也可以
这涉及到Perl的一个基本规则:除非去掉括号会改变意思,否则括号总是可有可无的。
4.3 defined函数
用于判断一个变量是undef还是非空字符串,可以使用defined函数,它对undef返回假,其它所有情况返回真。

没有评论: