perl实例精解》学习笔记第

作者itnihao,转载请注明出处,谢谢合作!

一,关于变量的描述

变量是一种数据项,其值可随着程序的运行而发生变化。

变量可以位于程序的任何位置,并且不需要像在高级语言中那样声明它为特点的类型。

变量的值可以为字符串,数字或是它们的组合。

二,perl变量的类型

A.标量型 

 $变量=值;

B.数组型  

 @数组='1''2''3');

C.关联数组(常称散列【hash】) 

          %hash=('标量1’ => ‘值1’,

                 '标量2’ => ‘值2’, 

三,变量的作用范围

变量的作用范围默认是全局的。如需局部变量,需要用相关局部变量函数ourmylocal设置

四,变量如何赋值

  赋值运算符是等于号(=),常将右侧的值赋值予左侧的变量。任何赋的值都代表了一个已经命名的存储空间,称为左值(lvalue

  语句以分号(;)结尾。

举例

#!/usr/bin/perl

$day=12;                       #变量

@months=('Mar','Apr','May');       #数组

%states= (                       #散列

   'CA' => 'California',

   'ME' => 'Maine',

   'MT' => 'Montana',

   'NM' => 'New Mexico',

         );

print "$day\n";                 #\n换行

print "@months\n";              

print "$months[0], $months[1], $months[2]\n";  #打印数组中的值

print "$states{'CA'}, $states{'NM'}\n";         #打印散列中的值

print $x + 3, "\n";                          #未赋值的为空

print "***$name***\n";                     #为赋值的为空

运行结果如下

五,引号规范

单引号,双引号都可以作为定界符。区别如下

单引号不支持特殊字符,引号内插入的变量无法识别

双引号可以执行变量等特殊字符

反引号,执行shell等系统命令。注意,此处的反引号是~键上面的`

Perl提供了用另外一种形式的引号表示方法。q,qq,qxqw

q代表一个单引号    q/Hello/   'Hello'

qq代表一个双引号   qq/Hello/  "Hello"

qx代表一个反引号   qx/date/   `date`

qw代表引用的子列表 @list=qw/red yellow blue/;       @list={'red','yellow','blue'}

六,变量型变量

#!/usr/bin/perl

$number=200;                                     #数字

$name="itnihao";                                   #字符

$today=localtime();                                 #perl的内部函数,获取时间

print  q/$today,number is $number,name is $name\n/,"\n";  #单引号,则变量无法执行

print  qq/$today.number is $number,name is $name\n/;     #双引号,内部变量正确执行

print  "$today,${name}'s perl\n";                       #{}后面可以追加值

print  qx/date\n/;                                    #反引号,执行系统的date命令

perl中,表示特殊符号,如$100 则用\转义即可

defined函数,标量不为有效的字符串,数字的时候,就是未定义的变量,返回null,成功则为1

undef函数 解除已经定义的变量

$_ 标量型变量

$_赋值后,chompsplitprint会把新的$_值当做输入参数

#!/usr/bin/perl

$name="itnihao";                           #定义变量

print "name OK   \n" if defined $name;         #如果变量定义,显示name OK

print "name wrong\n" if defined $NAME;         #如果变量定义,显示name wrong

undef $name;                                #取消标量name的值

print "name $name\n";                         #打印$name,此处已经取消

$_="good night!";                             #赋值

print;                                        #显示$_

执行结果

七,数组

7.1数组概念

perl中,数组是一个有名字的列表,含有有序的标量型变量集合。数组必须以@开头,数组名位于方括号([])之间的下标,非负整,从0开始

举例

#!/usr/bin/perl

@name=("Qiu","Gao","Qi","Shuang");  #数组

@list=(2..20);     #数组,值为2-20的自然数

$a=1;            #定义三个标量

$b=2;

$c=3;

@items=($a,$b,$c); #使用含有3个标量的列表对数组初始化

$size=@items;     #将数组赋值给$size标量型变量,值是数组中的元素个数(从0开始)

@mammals=qw/dogs cats cows/;  #qw数组定界符

@fruit=qw(apples pears peaches);  

print "@name\n";             #单元@name数组的值

print "the \@name    is $#name+1 words\n";  #其中$#name是数组的个数(从0算起)

print "$name[0],$name[1],$name[2],$name[3]\n"; #依次打印数组中的值

print "the \@list   is @list\n";                #打印数组中的值2-20

print "the \$a \$b \$c is @items\n";             #数组由变量构成

print "the \$size    is $size\n";               #数组赋值给标量,显示元素个数

print "the \@mammals is @mammals\n";        #使用qw定界符的数组

print "the \@fruit   is @fruit\n";

7.2特殊标量和数组赋值

$#arrayname 取数组长度,或者是截取数组的长度

$[初始下标为0,也可以不从0开始,不过perl作者不推荐这么做

#!/usr/bin/perl

@grades=(90,87,96,100,86);

print "array is @grades\n";

print "The number of the last index is $#grades\n";

$#grades=3;     #改变了数组的长度,将数组下标缩减为3

print "The array is truncated to 4 elements:@grades\n";

@grades=();     #使用了一个空列表,使得该数组被清空

print "The array is completely truncated:@grades\n";

运行结果如下

如何访问数组

@name[0],表示数组中的第一个标量,以此类推。

@name[-1,-3] 从数组中的倒数第一个标量到倒数第三个标量

7.3数组分片 (Array Slices)

 当把某个数组的值赋予到另一个数组中时,得到的数组称为数组分片.

#!/usr/bin/perl

@names=('Tom','Jack','Green','Pete');

@pal=@names[1,2,3];

print "@pal\n\n";

($friend[0],$friend[1],$friend[2])=@names;

print "@friend\n";

把元素Tom','Jack','Green','Pete赋予数组@names

把数组@names元素123赋予数组@pal,本行会把数组@names的元素分片存储到@pal数组中。

通过抽取数组@names的的分片元素123,传报个价数组@pal

 

#!/usr/bin/perl

@colors=('red','green','yellow','orange');

($c[0],$c[1],$c[3],$c[5])=@colors; #创建数组分片,它由$c[0],$c[3],$c[5]) 四个标量型元素组成,注意这个下标编号不是连续的。

print "********************************\n";

print "colors is ",@colors,"\n";

print "colors is ","@colors\n";

print "********************************\n";

print "colors is ",$c[0],"\n";   #有值red

print "colors is ",$c[1],"\n";   #有值green

print "colors is ",$c[2],"\n";   #无值

print "colors is ",$c[3],"\n";   #有值yellow

print "colors is ",$c[4],"\n";   #无值

print "colors is ",$c[5],"\n";   #有值orange

print "*******************************\n";

print " The size of the \@c arry is ", $#c + 1,".\n";  # $#c是数组C元素的个数(从0开始)

print "*******************************\n";

 

 

暂且于此,下篇继续讲解多维数组,散列(哈希),和关于对数据操作的重要变量。