Learning Perl学习笔记之标量数据(一)
数字
所有数字的内部格式相同
- 在Perl内部总是按双精度浮点数的要求来保存数字并进行运算的
- Perl内部并不存在整数值——程序中用到的整型常量会被转换成等效的浮点值
浮点数直接量
- 直接量是指某个数字在Perl源代码中的写法
- 直接量的三个特点
- 并非运算结果
- 也不是输入输出操作的结果
- 仅是直接键入程序的源代码的数据
- Perl浮点数直接量的写法
- 小数点与前置的正负号都是可选的
- 数字后面加上用e表示的10的次方标识符
整数直接量
- Perl允许插入下划线区分
非十进制的整数直接量
- 八进制直接量以o开头
- 十六进制直接量以ox开头
- 二进制直接量则以ob开头
- 非十进制的直接量同样容许在这些直接量中使用下划线
数字操作符
- 加减乘除
- 取模操作符(%)
- 乘幂操作符(**)
字符串
- 最短的字符串为空字符串,最长的字符串长度没有限制,可以填满内存
- Perl尽可能遵循“无内置限制”的原则
- 字符串通常时候可输出的字母、数字及标点符号组成,其范围介于ASCII编码的32-126之间
- Perl完全支持Unicode,但如果想要在源代码中使用Unicode书写直接量需要手工加上utf8编译指令
use utf8;
最好养成习惯加上这句,可能在源代码中会出现ASCII字符范围以外的字符
单引号内的字符串直接量
- 单引号不是字符串内容
- 单引号的字符都代表它们自己
- 单引号的\n并不是换行符而是表示字面上的两个字符,反斜线和字母n
- 只有在反斜线后面接续单引号或者反斜线时,才表示转义。
Perl不会解析单引号中的内容,但是会解析双引号中的。
如果将变量放在单引号中,Perl仅仅会认为它是用户要显示字符(\’和\\除外的转义字符也不会解析)。
但是如果将其放在双引号的字符串里,它将被解析为一个变量。而且Perl还会解析变量字符串里的特殊字符。
即使用单引号表示字符串时可以不用\作为转义字符,例如:
str = ‘This is a string’;print ‘The String is str’;
输出如下:The String is $str
双引号内的字符直接量
- 双引号中的反斜线可以转义控制很多字符,反斜线转义表格如下
- 双引号内字符串的另一种特性称为变量内插,这是指在使用字符串时,将字符串内的变量名称替换为该变量当前的值。
字符串操作符
- 字符串可以用句点(.)操作符连接起来,两面的字符串都不会因此操作而被修改
- 连接运算必须显式使用连接操作符,而不像其他某些语言只把两个字符串放在一起就行
- 字符串重复操作符,小写字母x
- 此操作符会将左边的操作数与他本身重复连接,重复次数则由右边的操作数指定。
- 重复次数(右操作数)在使用前会先取整(4.8变成4)。重复次数小于1时,会生成长度为零的空字符串。
数字与字符串之间的自动转换
- Perl会根据需要自动的在数字和字符串之间进行类型转换,Perl会根据操作符来判断。
- 如果操作符(比如+)需要的是数字,Perl会将操作数视为数字;
- 如果操作符(比如.)需要的是字符串,Perl会将操作数视为字符串;
- 对数字进行运算的操作符(比如乘法)如果遇到字符串类型的操作数, Perl会自动将字符串转换成等效的十进制浮点数进行运算。
- “12“ * ”3”的结果会是36。字符串中非数字的部分(以及前置的空白符号)会被略过, 所以“ 12fred34" *"3”也会得出36, 而不会出现任何警告信息。
- 在最极端的情形下, 完全不含数字的字符串会被转换成零。 比如把“fred”当成数字来用就属于这种情况。
- 碰到以八进制, 或者十六进制, 甚至二进制写法表示的宇符串时, 得用专门的转换函数 oct()或hex()将其转换成对应数字。 详细信息请参阅笫252 页的 “非十进制数字字符串的 转换” 一节。
- 同样地, 需要字符串的操作符(比如字符串连接符)意外得到数字时, 该数字就会被转换为形式相同的字符串。
- 比如要把字符串z与 “ 5乘以7的结果” 相连接
- “Z”. 5 * 7 #等同于“ Z".35, 得“ Z35"
- 大多数时候你根本不必关心数字和字符串的区别, Perl会自动完成转换数据的工作