Perl用标量来称呼单个事物,这是Perl里最简单的一种数据类型
- 数字
在Perl中总是按照双精度浮点数来保存数字进行运算的。所以Perl内部不存在整数值。
浮点数直接量
是指某个数字在Perl中直接的写法,如:1.25,7.25e45,-1.2e-23整数直接量
61298012 == 61_298_012
非十进制的整数直接量
八进制0377,十六进制0xff,二进制0b1111111数字操作符
+-×/%,都是按照浮点数类型进行运算!!
- 字符串
Perl字符串能包含任何字符,可用来创建扫描操控二进制数据。可将一个可执行文件读入perl,修改后再写回去。
-
单引号内的字符串直接量
'FRED','\'\\'
-
双引号内的字符串变量(反斜杠能转移更多控制字符)
" barney" ,"hello,world\n"
-
字符串操作符
字符串可以用.操作符连接起来,连接后得到一个新的更长的字符串。"HELLO"." "."WORLD" == "HELLO WORLD"
字符串重复操作符:x
"FRED" x 3
此操作符将左边的操作数与它本身重复右边操作符次数
- 数字和字符串之间的自动转换
Perl会根据需要,自动在数字和字符串之间进行类型转换操作。如果操作符(如+)需要数字,则转换为数字,若字符串不包含数字则转换为0。如果操作符(如.)需要字符串,则转换为字符串。
Perl的内置警告信息
我们可以通过编译指令开启警告功能
#!/usr/bin/perl
use warnings;
也可以在命令行上通过-w选项开启警告功能
** Perl -w my_program**
Perl发出的警告信息不会改变程序行为,如果想让警告信息更详细,可以加上
use diagnostics
或者
perl -Mdiagnostics ./my_program
标量变量
标量变量就是单单存储一个值的变量。标量变量的名称以$符号开头 。标识符是区分大小写的。
- 标量的赋值(=)
- 双目赋值操作符(+=)
- 乘幂操作符(**=)
print输出
默认输出到标准输出。可以输入一系列用,隔开的值
字符串中的标量变量内插
$meal = "steak";
$barney = "fred ate $meal"
如果标量变量从未被赋值过,则会用空字符串来替换。
借助代码点创建字符
直接键入这些字符的代码点,然后通过chr()函数转换为对应的字符。反过来也可以通过ord()把字符转换为代码点。
$alef = chr(0x05D0);
若不想预先创建变量,也可以通过双引号内\x{}的形式创建。
"\x{03B1}\x{03C9}"
比较操作符
** == eq
!= ne
< lt
> gt
<= le
>= ge
**
Perl内的if控制结构和c一样(只是必须要加花括号)
布尔值
Perl没有专门的布尔类型变量
- 如果是数字,0为假,其余为真
- 如果是字符串,空字符串为假,其余为真
- 如果既不是数字也不是字符串,就先进行转换
小技巧,连续两次!操作,可以得到表示布尔值的变量
$still_true = !!'0'
获取用户输入
"行输入"操作符<STDIN>
把<STDIN>放在程序希望返回标量值的位置,Perl会从标准输入读取一行文本。这一过程是阻塞的,且由<STDIN>返回的字符串一般在末尾都会带有换行符
$line = <STDIN>;
print $line;
chomp操作符
chomp()的任务就是去除一个字符串单个变量的末尾的换行符,如果字符串后面有两个以上的换行符,chomp只删除一个,如果结尾处没有换行符,就直接返回0。返回值是被移除的字符数。
while控制结构和c一样
undef值
在首次赋值之前,变量的初始值就是特殊的undef值,当数字用则是0,当字符串用则是空字符串。
defined函数
行操作符<STDIN>有时候会返回undef,例如读到文件结尾时的情况,要判断某个字符串是undef而不是空字符串,可以使用defined函数,若是undef,函数返回假
defined($test)