I.知识点概要:
1.标量(数字型、字符型)
1.标量$Scalar
标量是用于存放一个值的变量,这个值可以是数字,也可以是字符串(其实数字就是字符串)。
Perl通过变量前的“魔符”$来识别标量。
1.1.数字类型标量
# 浮点数直接量
$Scalar =1.25;
$Scalar =255.000;
$Scalar =7.25e45; # 7.25*10的45次方
$Scalar =-6.5e24; # -6.5*10的24次方
$Scalar =-12e-24; # -12*10的-24次方
$Scalar =-1.2E-23; # 另一种表示法:字母E也可以是大写
# 整数直接量
$Scalar =0;
$Scalar =2001;
$Scalar = -40;
$Scalar =61298040283768;
$Scalar =61_298_040_283_768; # 整数直接量可以插入下划线
# 非十进制整数直接量
$Scalar =0377; #八进制以0开头
$Scalar =0xff; #十六进制以0x开头
$Scalar =0b1111; #二进制以0b开头
$Scalar =0x1377_0B77; #整数直接量可以插入下划线
$Scalar =0b1101_0101; #整数直接量可以插入下划线
注1:尽管数字有两种类型:整数、浮点数,但在Perl中总是按照”双精度浮点数”(IEEE-745,15位精度)的要求来保存数字并进行运算。
1.2.字符串类型标量
# 单引号内字符串直接量
$Scalar ='fred'; #含4个字符:f、r、e、d
$Scalar =''; #空字符串(没有字符)
$Scalar ='hello\n'; #含7个字符:h、e、l、l、o、\、n
$Scalar ='\''; #含1个字符:'(转义)
$Scalar ='\\'; #含1个字符:\(转义)
# 双引号内字符串直接量
$Scalar ="fred"; #与'fred'写法一致
$Scalar ="hello\n"; #hello、换行(转义)
$Scalar ="ABC\lABC" ; #ABCaBC(转义)
注1:单引号字符串除单引号(’)和反斜线(\)外,其他字符都代表自己。要表示单引号或反斜线本身则必须在其前面加上反斜线转义,即(\’)(\\)。
注2:双引号字符串在单引号字符串基础上扩展了更多的反斜线转义,功能更强大。
注3:字符串可以是各种字符(字母、数字、标点)任意组合而成,最短的字符串不包括任何字符,即空字符串(与C中不用的是Perl字符串不需要空字符表示结尾);最长的字符串没有限制,甚至可以填满所有内存。
1.3.数字与字符串自动转换
Perl会根据需要,自动在数字与字符串之间进行类型转换,判断依据取决于操作符。对数字进行运算的操作符如果遇到字符串类型操作数,Perl会自动将字符串转换成等效十进制浮点数进行运算(”12fred34”->12,”fred”->0);同样需要字符串的操作符意外得到数字,该数字就会被转换成形式相同的字符串(12->”12”)。
注1:非十进制表示的数字直接量的“前置零”,不能用于字符串到数字的转换,如’0377’->377,而不是255。
1.4.标量初始化-undef值、defined函数
如果还没赋初值就用到某个标量,则此时标量初始值为特殊的undef值,undef值既可被当做数字0,也可被当做空字符串,但undef既不是数字也不是字符串。
如果要判断某个标量是否被赋初值,则可使用defined函数,如果是undef,该函数返回假,否则返回真。
# undef值、defined函数
$Scalar =undef; #undefine
#$Scalar =''; #defined
if ( defined($Scalar) ){
print "defined";
}else{
print "undefined";
}
1.5.剪除字符串末尾换行符-chomp函数
chomp函数用于将字符串型标量结尾的换行符(如果存在的话,不存在则不做任何处理)去掉,它的返回值是实际移除的字符数,这个返回值无用处。
# chomp函数
$Scalar ="hello\n";
chomp($Scalar);
print "$Scalar"; #输出hello
-------------------------------------------------------------------------------------------------------------------------------
I.参考资料:
[1]. 盛春译.《Perl语言入门》[第六版][M].东南大学出版社,2012.
第二章,标量数据
[2]. 周良忠译.《C程序员精通Perl》[M].人民邮电出版社,2003.
第2章,Perl基础知识
II.修订记录:
2013.01.04. 第一稿
-------------------------------------------------------------------------------------------------------------------------------