Day Vision

Reading Everyday,Extending Vision

Perl学习笔记1——标量数据与perl初步

2022-09-16 06:50:06


例:print'HelloWorld!';       #输出“Hello World!”到屏幕chomp($n=);    #从键盘读取一行输入并存入$n,并去掉其末尾的换行符print$n;                #输出$n的内


标量的概念

Perl使用标量来称呼单个事物,标量是Perl中最简单的一种数据类型。标量可分为两种:数字和字符串。在Perl程序内部,这两种类型是可以内部转换的,所以对于Perl来说,所有的标量没有本质区别。

数字直接量

数字直接量是某个数字在Perl源代码中的写法,分为浮点数直接量与整数直接量,分别表示浮点数与整数。其写法与普通的数字没有明显区别。当数字很长时,可以在数字中加入下划线分隔,这样做不会改变原数字的意义。例:

2015  -2  3.14159 123_456_789    #各种数字直接量

字符串

字符串就是一个字符序列,其可以由任意长度字符任意组合而成。最短的字符串不包含任何字符,即空字符串。字符串的内容一般为数字,大小写字符,各种符号,以及其他特殊内容等。

同数字直接量,Perl中字符串直接量也有一定的书写方式。其分为两种不同的形式:单引号内的字符串和双引号内的字符串。

单引号内的字符串直接量

单引号内的字符串直接量指使用一对单引号圈引的一个字符串。单引号可以让Perl识别字符串的开头与结尾,即起到划定范围的作用。在单引号内,除了反斜线和单引号,其他所有的字符都代表其本身而没有其它含义。所以单引号一般用于安全地书写纯字符内容。如果需要表示单引号或反斜线本身,需要在其前面加上一个反斜线,表示转义。例:

‘fred’   #字符串fred

‘’      #空字符串

‘\\n’   #字符串\n

‘\’\\’   #一个单引号和一个反斜线

双引号内的字符串直接量

双引号内的字符串直接量使用一对双引号圈引。在双引号中主要有两大功能特性:反斜线转义与变量内插,变量内插将在下文中提及。反斜线转义指用一个反斜线加上某个字符,可以表示许多特殊的意义。常用的反斜线转义有:

\n    #换行符

\L    #将后面所有字母转为小写

\l     #将下个字母转为小写

\U    #将后面所有字母转为大写

\u    #将下个字母转为大写

\E    #结束\U与\L的作用范围

数字与字符串操作符

Perl提供了各种常用的数字运算操作符与字符串操作符。常用的数字操作符有:

3+2  3-2  3*2  3/2    #3加/减/乘/除2

3%2                  #3除2取余

3**2                  #3的2次方

int(3/2)                #3除2取整

注意:取余操作符会先对两边的操作数都进行取整再进行运算。int是取整函数,可以对其参数进行取整。

字符串操作符用于对字符串进行处理。常用的有“.”和“x”操作符。“.”是字符串连接操作符,其可将多个字符串无缝连接,得到一个更长的字符串。“x”是字符串重复操作符,其可将操作符左边的字符串,以右边操作数的次数进行重复连接。当右边的操作数不为整数时,会先对其取整再进行连接。如果右边的操作数为0,则会得到空字符串。例:

‘f’ . ‘r’ . ‘e’ .‘d’    #得到‘fred’

‘fred’ x 3         #得到‘fredfredfred’

各种操作符之间具有一定的优先级,在一般情况下,可以利用括号的最高优先级,将先运算的部分放入括号内,从而不会出错且清楚直观。

数字和字符串之间的自动转换

Perl会根据操作符的需要,自动地在数字和字符串这两种标量类型之间进行转换。如果操作符需要的是数字,就会将其两边的操作数视为数字处理,而如果操作符需要的是字符串,则会将其两边的操作数视为字符串处理。字符串转为数字时,字符串的非数字部分会被略去,即字符串必须以数字开头,从第一个非数字字符开始的全部内容会被略去。而如果字符串被略去了所有字符,则会被转换为数字0处理。例:

‘1ab’   #会被转换为数字1

‘ab1’   #会被全部略去,转换为数字0

‘ab’.1   #右边的1会被转换为‘1’

标量变量

变量就是存储一个或多个值的容器,而标量变量就是只存储一个标量值的容器。后续还有数组变量和哈希变量等,这些都是可以存储多个值的变量。变量的名称在整个程序中保持不变,但其值可以不断改变。

标量变量以“$”开头,表示“取单个东西”或“取标量”,这个符号也称为“魔符”。$后接变量的名称,其属于Perl标识符的一种。标识符是Perl中的一类用于定义许多事物(如这里的标量变量)名称的一串字符,其必须由字母或下划线开头,后可以接多个字母、数字或下划线,一般不建议使用全大写标识符,因其容易与Perl的特殊标识符相冲突。习惯上标识符应全小写。例:

$m  $n $i    #一些标量变量

变量的赋值与双目赋值操作符

单个标量可以被存储进标量变量中,这样的操作就称为对变量赋值。Perl中的赋值操作符为等号,等号的左边为变量,右边为值,表示将右边的值赋值给左边的变量。赋值操作时,会先对赋值式右边的内容进行运算、取值,最后再赋值给变量,即变量存储的是最终的计算结果或字符串。Perl中,使用分号来分隔每一行的程序源代码。例:

$n=1;            #$n为1

$m=1+2;         #$m为3

$i=$n+$m;        #$i为4

$a=‘abc’ . ‘def’;    #$a为‘abcdef’

赋值操作时常常需要对一个变量的值进行运算,再将结果存回原变量中,从而实现了变量内容的更新。这种操作十分常见,所以Perl为其提供了简写,即使用双目赋值操作符。双目赋值操作符由一个运算操作符加上等号组成,操作符的左边为变量,右边为运算符的操作数。例:

$n+=3;      #等同于$n=$n+3;

$m**=3;     #等同于$m=$m**3;

$i.=‘fred’;    #等同于$i=$i .‘fred’;

“.=”又称追加操作符,由字符串连接符和等号组成。可以在原变量的后面添加字符串,再存入原变量。

标量变量内插

上文提到,双引号圈引的字符串中可以使用变量内插。变量内插即将变量书写在双引号圈引的字符串中。在这个字符串被调用时,所有内插的变量都会被替换为该变量当前的值。如果不想使用变量内插,可以用单引号圈引字符串,或使用反斜线转义来表示$本身。进行变量内插时,Perl会尽可能使用最长且合法的变量名称,所以当变量名后紧跟着一些字符时,就会对变量名造成歧义。解决办法为:用一对花括号围住变量名,来限定其范围。如果整个字符串只由一个标量变量组成,则可省略该变量两边的字符串引号,这个简写常用于print后(稍后提到)。例:

$n=3;

$m=“1 2 $n”;     #$m为“1 2 3”

$q=“\$n”;        #$q为“$n”

$r=“ab${n}cd”;    #$r为“ab3cd”

chomp print 操作符初步

被称为行输入操作符,其作用为从键盘上读取一行(或多行)用户输入。读取的内容可以赋值给变量,从而进行其他操作。输入内容完毕后,按回车键结束输入,从而继续进行下面的程序。

在使用行输入操作符录入数据时,由于数据录入以回车键结束,所以录入数据的每一行的最后一定会被带上一个换行符。此时如果需要去掉换行符,就可以用到chomp操作符。chomp操作符可以作用于单个字符串,去掉其末尾的一个换行符。最常见的用法是与赋值式连用,先赋值,再去掉其末尾换行符。chomp本质上是函数,会返回去掉的换行符数,但这个返回值没有太大意义。

print操作符可以输出任何指定的内容到屏幕。在只需要输出一个标量变量时,可以省略变量两边的字符串引号。例:

print'HelloWorld!';       #输出“Hello World!”到屏幕

chomp($n=);    #从键盘读取一行输入并存入$n,并去掉其末尾的换行符

print$n;                #输出$n的内容到屏幕,省略引号

比较操作符与逻辑运算初步

Perl中有一套可以用于数字比较和字符串比较的操作符。字符串比较按照ASCII编码的顺序决定先后。这些操作符可以返回真值或假值,从而被用于逻辑运算。常见的比较操作符列举如下:

比较        数字        字符串

等于         ==           eq

不等于       !=           ne

小于         <           lt

大于         >           gt

小于等于     <=          le

大于等于     >=          ge

常见的比较操作举例:

2==2           #True

‘abc’ eq‘abc’    #True

2>3            #False

3!=3           #False

Perl中有一整套的逻辑运算操作符,可以用来进行逻辑运算。常用的逻辑运算操作符列举如下:

||     #逻辑或

&&    #逻辑与

!      #逻辑非(单目取反操作符)

and    #低优先级的逻辑与

or     #低优先级的逻辑或

xor    #逻辑异或

not    #低优先级的逻辑非

简单的逻辑运算操作举例:

(1==2)||(1==1)     #True

1==2 or 1==1      #True

(1==2)&&(1==1)    #False

1==2 and1==1     #False

!(1==1)           #False

布尔值

Perl中,任何标量值都有逻辑上的真假之分。当一个标量值作为逻辑运算的真假值进行处理时,这个值就称为布尔值。布尔值的真假由以下规则来判定:

如果标量值为数字,则0为假,其他为真。

如果标量值为字符串,则空字符串和‘0’为假,其他为真。

undef与变量值为undef的变量为假(详见“undef值”)。

布尔值有其默认的真假返回值。如果是真值,则默认返回的布尔值为1,如果是假值,则默认返回undef。例:

$n=1==1;    #逻辑真值,比较操作符返回的布尔值为1,即$n为1

$m=1!=1;    #逻辑假值,比较操作符返回的布尔值为undef,即$m为undef

if 控制结构

if属于Perl的控制结构语句之一,即if条件语句控制结构。其代码由三部分组成:关键词、条件语句和代码块。关键词即语句名称if,条件语句是一个能返回布尔值的表达式,如逻辑运算式或标量变量等,其由一对小括号围住。代码块由一对花括号围住,在条件语句返回布尔真值时执行。

如果有多个判断条件需要依次判断时,可以继续使用elsif作多个追加判断,其用法类似于if。else可以在所有判断条件都不符时执行其代码块。例:

if($n>$m){

print"$n>$m";    #如果$n>$m,就执行这里的代码块

}elsif($n<$m){

print"$n<$m";    #如果$n<$m,就执行这里的代码块

}else{

print"$n=$m";    #如果上面都不符合,则执行这里的代码块

}

while 控制结构

while是Perl中五大循环块之一,属于控制结构语句。其代码类似于if,也由关键词while、条件语句和代码块组成。while控制结构会先判断条件语句是否为真,如果为真,就执行代码块,完成之后会再次不断地进行这一循环,直到条件语句返回假,此时跳出while循环。例:

$m=10;

while($m){

$m-=1;

print$m;   #当$m返回布尔真值时(即不为0时),不断执行这里的代码块,直到$m为0导致条件语句返回假时,跳出此代码块

}             #结果为输出9到0这十个数字,$m为0时跳出循环

如果不小心运行了无限循环程序,可以按下ctrl+C强制终止程序运行。

undef

Perl中有一个特殊类型的标量值,即undef值。undef的含义为未定义的,所以undef值即未定义值。它既不是数字也不是字符串,但其可以在需要时被转化为这两者进行处理。如果undef被当作数字使用,则其会被转化为0,而如果其被当作字符串使用,则会被转化为空字符串。当一个变量未被赋值时,这个变量的初始值就是undef,这是undef最常出现的情况。例:

$n+=1;     #$n的undef值表现为0,所以结果为1

$m.='a';    #$m的undef值表现为空字符串,所以结果为‘a’


樱雨楼

完成于2016.1.1

最后修改于:2016.1.24