【Perl】标量数据
数字
-
在Perl内部,总是按“双精度浮点数”的要求保存数字并进行运算。
-
浮点数直接量
2.1 含义:直接量并非运算结果,也不是I/O操作的结果,它是直接键入程序源代码中的数据
2.2 Perl浮点数的写法- 1.25
- 255.0
- 7.25e45 #7.25乘以10的45次方
- -6.5e24 #负6.5乘以10的24次方
- -12e-24 #负12乘以10的-24次方
- -1.2E-23 #另一种表示方法:字母E也可以是大写的
-
整数直接量
Perl允许在整数直接量中插入下划线,将若干位数分开,写成这样看起来就很清楚了- 61_298_040_283_768
-
非十进制的整数直接量
(1)和许多其他程序语言一样,Perl也允许使用十进制以外的其他进制来表示数字。八进制直接量以0开头。十六进制直接量以0x开头,而二进制直接量则以0b开头。十六进制数的A到F(或是小写的a到f也行),代表十进制的10到15的数字。例如:- 0377 #八进制的377,等于十进制的255
- 0xff #十六进制的FF,也等于十进制的255
- 0b11111111#也等于十进制的255
(2) 非十进制直接量的长度超过4个字符时,读起来可能会有些困难。因此Perl同样容许在这些直接量中使用下划线,分开后读起来更容易些:
- 0x1577_0B77
- 0x50_65_72_7C
-
数字操作符
(1) Perl提供各种常见的数字运算操作符,比如加法、减法、乘法、除法等等。
(2)数字操作时,总是按浮点类型进行运算
(3)乘幂操作符以双星号表示,比如2**3代表2的3次方
字符串
- 字符串能够包含任何字符,所以可用它来创建、扫描或操控二进制数据,这是许多其他工具语言忘尘莫及的。比如,你可以将一个图形文件或编译过的可执行文件读进Perl的字符串变量,修改它的内容后再写进去。
单引号内的字符串直接量
- 除了单引号和反斜线字符外,单引号内所有字符都代表它们自己(包括换行符)。
- 要表示反斜线和单引号本身时,需要在该字符前加一个反斜线字符表示转义
- 单引号内的\n并不是换行符,而是表示字面上的两个字符:反斜线和字母n
双引号内的字符串直接量
- 双引号中的反斜线可以转义许多控制字符,或是用八进制或十六进制写法来表示任何字符
"hello world\n" #helloworld后面接着换行符
字符串操作符
- 字符串可以用.操作符连接起来。运算后得到一个更长的字符串,可以继续用于其他运算或赋予某个变量
- 有个比较特殊的字符串重复操作符,小写字母x,重复次数则由右边的操作数(某个数字)指定
- "hello" x 3 #得"hellohellohello"
- 5 x 4.8 # 本质上就是"5"x4,所以得”5555“
- 最后一个例子,因为重复操作符的左操作数必然是字符串类型,所以数字5在进行重复操作前,先被转换成单字符的字符串”5“,然后这个字符串被重复了4次
- 重复次数在使用前会先取整(4。8变成4)。重复次数小于1时,会生成长度为0的空字符串。
数字和字符串之间的自动转换
- Perl根据操作符自动在数字和字符串之间进行类型转换,这完全取决于操作符。如果操作符需要的是数字,比如+,Perl就会将操作数视为数字,如果操作符是. ,Perl便会将操作数视为字符串
- 对数字进行运算的操作符(比如乘法)如果遇到字符串类型的操作数,Perl会自动将字符串转换成等效的十进制浮点数进行运算,因此”12“”3“的结果会是36.字符串中非数字的部分(以及前置的空白字符)会被略过,所以”12fred34""3"也会得出36,而不会出现任何警告信息。在最极端的情形下,完全不含数字的字符串会被转换成零。
- 要把字符串Z与“5乘以7的结果”相连接:
“Z” . 5*7 #等同于“Z".35 得”Z35“ - 总的来说,大多数时候你根本不必关心数字和字符串的区别,Perl会自动完成转换数据的工作。
标量变量
- 标量变量的名称以美元符号$开头,然后是变量的Perl标识符。
- 标识符区分大小写
- 标量变量总是存储一项数据
- $fred = $fred + 5 <==> $fred += 5
用print输出结果
- print "hello world\n";
- print "The answer is ";
- print 6*7;
- print ".\n"
- 可以用print输出一系列用逗号隔开的值
- print ”The answer is ",6*7,".\n";
字符串中的标量变量内插
- 一般我们用双引号圈引字符串的目的,除了是要用之前提到过的反斜线转义外,多半是为了使用变量内插。其实说白了,就是把字符串内出现的所有标量替换成该变量当前的值。比如:
- $meal= “brontosaurus steak”;
- $barney="fred ate a $meal"; #fred ate a brontosaurus steak
- 如果标量从未被赋值过,就会被空字符串来替换
- 如果只是要打印这个变量,则不必使用变量内插的方式
- print "$fred"; #双引号是多余的
- print $fred; #这样写比较好
- 变量内插又被称为双引号内插,因为它通常是在双引号(而非单引号)里起作用的。
- 可以用一对花括号将变量名围起来避免内插的值后面紧接着输出字母、数字或下划线。
- $what = "brontosaurus steak";
- $n = 3;
- print "fred ate $n ${what}s.\n";
if控制结构
- 条件语句中的代码周围一定要加上表示界限的花括号。
获取用户输入
- 只要把
放在程序中希望返回标量值的位置上,Perl就会从标准输入读取一行文本(知道换行符为止)。 - 由
返回的字符串一般在末尾都会带有换行符。
$line = <STDIN>;
if($line eq "\n"){
print "That was just a blank line!\n";
}else{
print "That line of input was:$line";
}
- 不过实际编写代码时,很少需要保留末尾换行符,所以人们常常会用chomp()操作符去掉它。
chomp操作符
- chomp()操作符只能作用于单个变量,且该变量的内容必须为字符串,如果该字符串末尾是换行符,chmod()的任务就是去掉它。
- chomp()最常用的用法就是连用:
chomp($text = <STDIN>); #读入文字,略过最后的换行符
$text = <STDIN>; #做同样的事......
chomp($text); #......却分成两步
- 文本文件必须以换行符结尾