美文网首页Perl小推车
Perl学习笔记1——标量数据与perl初步

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

作者: 樱雨楼 | 来源:发表于2018-06-16 11:34 被阅读16次

    标量的概念

    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”

    chompprint操作符初步

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

    在使用行输入操作符录入数据时,由于数据录入以回车键结束,所以录入数据的每一行的最后一定会被带上一个换行符。此时如果需要去掉换行符,就可以用到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

    相关文章

      网友评论

        本文标题:Perl学习笔记1——标量数据与perl初步

        本文链接:https://www.haomeiwen.com/subject/jwxbeftx.html