2010年(122)
分类:
2010-07-15 10:45:27
第二章 标题数据
Perl用标量(scalar)来称呼单件事物。
数字
所有数字内部格式都相同
总是按“双精度浮点数”的要求来保存并进行运算。也就是说Perl内部并不存在整数值—程序中用到的整型常量会被转换成等效的浮点数值。
浮点数直接量
直接量是直接写在程序源代码里的数据。如:
1.25
255.000
-6.5e24
-1.2E-23
整数直接量
如:
0
2001
-40
255
可以在整数直接量里插入下划线,将若干位数分开,61_298_040
非十进制的整数直接量
十六进制0x开头,二进制0b,八进制以0开头。
如:
0377
0xFF
0b11111111
可以用下划线分开,如:
0x1377_0B77
数字操作符
主要是加(+)、减(-)、乘(*)、除(/)、取模(%)。
字符串
字符串可以由各种字符任意组合而成。最短的字符串是不含任何字符的空字符串。最长的字符串是没有长度限制的,甚至填满内存。因为字符串能够包含任何字符,所以可用它来对二进制数据进行创建、扫描和操作。
单引号内的字符串直接量
除了单引号和反斜线字符外,单引号内所有字符都代表它们自己。要表示反斜线字符本身,需要在这个反斜线字符前面再加一个反斜线字符;要表示单引号本身时,同样在单引号前加一个反斜线字符。
‘fred’ #总共4个字符:f、r、e和d
‘barney’ #总共6个字符
‘hello\n’ #后面接着反斜线和n
‘hello
there’ #hello、换行符、there(总共11个字符)
单引号内的\n并不代表换行字符,而是表示反斜线和n这两个字符。只有在后面是另一个反斜线或单引号时,前面的反斜线才有特殊的意义。
双引号内的字符串直接量
反斜线字符拥有更强大、更完整的能力,可用来表示控制字符,或是用八进制或十六进制写法来表示任何字符。
双引号内字符串的另一种特性称为变量内插,这是指在使用字符串时,将字符串内的变量名称替换成该变量当前的值。
字符串操作符
字符串可以用.操作符拼接起来。
“hello”.“world” #等同于”helloworld”
字符串重复操作符x,会将其左边的操作数与它本身重复连接,重复次数则由右边的操作数指定。
“fred” x 3 #得”fredfredfred”
复制次数在使用前会取整。复制次数小于1时,会生成长度为零的空字符串。
数字与字符串之间的自动转换
如何转换?取决于操作符需要什么类型的操作数。如果操作符(像是+)需要的是数字,Perl就会将操作数视为数字;在操作符(像是.)需要字符串时,Perl便会将操作数视为字符串。因此,你不必担心数字和字符串间的差异,只管合理使用操作符,Perl会自动完成剩下的工作。
“12”*“3”的结果会是36。
字符串中非数字的部分会被略过。“12fred34” * “3” 也会得到36
Perl内建警告信息
在发现程序有些不对劲的时候,你可以让Perl发出警告。要启用警告功能,请在命令行运行程序时使用-w选项:
perl –w my_program
或者,如果想要每次运行都启用警告功能,可使用#!行来指明:
#!/usr/bin/perl –w
如果看不懂警告信息,可以利用diagnostics这个编译命令看详细的问题描述。
标量变量
标量变量存储的是标量值。标量变量的名称是以美元符号($)开头,后面接着所谓的Perl标识符:一个字母或下划线为首,后面可以跟上多个字母、数字或下划线。你也可以把它想成由一个以上的字母、数字或下划线构成,但是开头不能是数字。另外,大写和小写的字母是被区分。
标量的赋值
用=号赋值。
双目赋值操作符
+=,.=,**=(乘幂操作符)
用print输出结果
可以用print输出一系列用逗号隔开的值:
print “The answer is “,6*7,”.\n”;
字符串中的标量变量内插
字符串内的所有标量变量名,都会被替换为该变量当前的值。
$meal=”steak”;
$barney=”fred ate a $meal”; #相当于”fred ate a steak”;
字符串’0’是唯一被当成假的非空字符串。
Perl里面我们可以用一对花括号将变量名围起来,以避免歧义。
$name=’liuyaoxing’;
print “${name}s”;
操作符的优先级与结合性
结合性 操作符
左 括号;给定参数的列表操作符
左 ->
++ --(自增;自减)
右 **
右 \ ! ~ + -
左 =~ !~
左 * / % x
左 + - .(双目操作符)
左 << >>
具名的单目操作符(-X 文件测试:rand)
< <= > >= lt le gt ge
== != <=> eq ne cmp
左 &
左 | ^
左 &&
左 ||
.. …
右 ?:
右 = += -= .=
左 ` =>
右 not
左 and
左 or xor
比较操作符
数值与字符串的比较操作符
比较 数值 字符串
相等 == eq
不等 != ne
小于 < lt
大于 > gt
小于或等于 <= le
大于或等于 >= ge
if控制结构
学会如何对两个值进行比较后,你可能会需要根据比较的结果决定下一步的流程。
布尔值
判断规则
如果值为数字,0为假;所有其他数字都为真。
如果值为字符串,空字符串(‘’)为假;所有其他字符串都为真。
如果不是数字也不是字符串,就先转换成数字或字符串再行判断。
字符串’0’跟数字0是同一个标量值,所以字符串’0’是唯一被当成假的非空字符串。
获取用户输入
使用“行输入”操作符
Chomp操作符
Chomp操作符的用途过于单一:它只能用在一个变量上,而且该变量的内容必须为字符串。如果 此字符串的结尾是换行符,chomp能将它移除。如果字符串后面有两个以上的换行符,chomp也仅仅删除一个。如果结尾处没有换行符,它什么也不做,直接返回零。
While控制结构
和C,C++里的一样。
undef值
标量变量的初值始为undef。
defined函数用来判断某个字符串是undef而不是空字符串。如果是undef,该函数返回假,否则返回真。