《perl实例精解》学习笔记第二天
作者itnihao,转载请注明出处,谢谢合作!
一,关于变量的描述
变量是一种数据项,其值可随着程序的运行而发生变化。
变量可以位于程序的任何位置,并且不需要像在高级语言中那样声明它为特点的类型。
变量的值可以为字符串,数字或是它们的组合。
二,perl变量的类型
A.标量型
$变量=值;
B.数组型
@数组=('值1','值2','值3');
C.关联数组(常称散列【hash】)
%hash=('标量1’ => ‘值1’,
'标量2’ => ‘值2’, ) ;
三,变量的作用范围
变量的作用范围默认是全局的。如需局部变量,需要用相关局部变量函数our,my,local设置
四,变量如何赋值
赋值运算符是等于号(=),常将右侧的值赋值予左侧的变量。任何赋的值都代表了一个已经命名的存储空间,称为左值(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,qx和qw
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函数 解除已经定义的变量
$_ 标量型变量
为$_赋值后,chomp,split和print会把新的$_值当做输入参数
#!/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元素1,2和3赋予数组@pal,本行会把数组@names的元素分片存储到@pal数组中。
通过抽取数组@names的的分片元素1,2,3,传报个价数组@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";
暂且于此,下篇继续讲解多维数组,散列(哈希),和关于对数据操作的重要变量。