perl的变量、数组、哈希1
2015-07-15 11:17
357 查看
变量是一种数据项,其值可随着程序的运行而发生变化。
变量可以位于程序的任何位置,并且不需要像在高级语言中那样声明它为特点的类型。
变量的值可以为字符串,数字或是它们的组合。
二,perl变量的类型
A.标量型
$变量=值;
B.数组型
@数组=('值1','值2','值3');
C.关联数组(常称散列【hash】)
%hash=('标量1’ => ‘值1’,
'标量2’ => ‘值2’, ) ;
三,变量的作用范围
变量的作用范围默认是全局的。如需局部变量,需要用相关局部变量函数our,my,local设置
四,变量如何赋值
赋值运算符是等于号(=),常将右侧的值赋值予左侧的变量。任何赋的值都代表了一个已经命名的存储空间,称为左值(lvalue)
语句以分号(;)结尾。
举例
五,引号规范
单引号,双引号都可以作为定界符。区别如下
单引号不支持特殊字符,引号内插入的变量无法识别
双引号可以执行变量等特殊字符
反引号,执行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 $namen/,"n"; #单引号,则变量无法执行
print qq/$today.number is $number,name is $namen/; #双引号,内部变量正确执行
print "$today,${name}'s perln"; #{}后面可以追加值
print qx/daten/; #反引号,执行系统的date命令
在perl中,表示特殊符号,如$100 则用\转义即可
defined函数,标量不为有效的字符串,数字的时候,就是未定义的变量,返回null,成功则为1
undef函数 解除已经定义的变量
$_ 标量型变量
为$_赋值后,chomp,split和print会把新的$_值当做输入参数
七,数组
7.1数组概念
在perl中,数组是一个有名字的列表,含有有序的标量型变量集合。数组必须以@开头,数组名位于方括号([])之间的下标,非负整,从0开始
举例
7.2特殊标量和数组赋值
$#arrayname 取数组长度,或者是截取数组的长度
$[初始下标为0,也可以不从0开始,不过perl作者不推荐这么做
运行结果如下
如何访问数组
@name[0],表示数组中的第一个标量,以此类推。
@name[-1,-3] 从数组中的倒数第一个标量到倒数第三个标量
7.3 数组分片 (Array Slices)
当把某个数组的值赋予到另一个数组中时,得到的数组称为数组分片.
#!/usr/bin/perl
@names=('Tom','Jack','Green','Pete');
@pal=@names[1,2,3];
print "@palnn";
($friend[0],$friend[1],$friend[2])=@names;
print "@friendn";
把元素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 ","@colorsn";
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";
变量可以位于程序的任何位置,并且不需要像在高级语言中那样声明它为特点的类型。
变量的值可以为字符串,数字或是它们的组合。
二,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 "$dayn"; #n换行 print "@monthsn"; 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 $namen/,"n"; #单引号,则变量无法执行
print qq/$today.number is $number,name is $namen/; #双引号,内部变量正确执行
print "$today,${name}'s perln"; #{}后面可以追加值
print qx/daten/; #反引号,执行系统的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 wrongn" if defined $NAME; #如果变量定义,显示name wrong undef $name; #取消标量name的值 print "name $namen"; #打印$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 "@namen"; #单元@name数组的值 print "the @name is $#name+1 wordsn"; #其中$#name是数组的个数(从0算起) print "$name[0],$name[1],$name[2],$name[3]n"; #依次打印数组中的值 print "the @list is @listn"; #打印数组中的值2-20 print "the $a $b $c is @itemsn"; #数组由变量构成 print "the $size is $sizen"; #数组赋值给标量,显示元素个数 print "the @mammals is @mammalsn"; #使用qw定界符的数组 print "the @fruit is @fruitn";
7.2特殊标量和数组赋值
$#arrayname 取数组长度,或者是截取数组的长度
$[初始下标为0,也可以不从0开始,不过perl作者不推荐这么做
#!/usr/bin/perl @grades=(90,87,96,100,86); print "array is @gradesn"; print "The number of the last index is $#gradesn"; $#grades=3; #改变了数组的长度,将数组下标缩减为3 print "The array is truncated to 4 elements:@gradesn"; @grades=(); #使用了一个空列表,使得该数组被清空 print "The array is completely truncated:@gradesn";
运行结果如下
如何访问数组
@name[0],表示数组中的第一个标量,以此类推。
@name[-1,-3] 从数组中的倒数第一个标量到倒数第三个标量
7.3 数组分片 (Array Slices)
当把某个数组的值赋予到另一个数组中时,得到的数组称为数组分片.
#!/usr/bin/perl
@names=('Tom','Jack','Green','Pete');
@pal=@names[1,2,3];
print "@palnn";
($friend[0],$friend[1],$friend[2])=@names;
print "@friendn";
把元素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 ","@colorsn";
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";
相关文章推荐
- Unity3D 游戏引擎之控制模型移动旋转与碰撞
- hdu 1016 Prime Ring Problem
- Activity Intent Flags及Task相关属性
- Jackson 教程示例
- 一、通过发送系统广播让android关机、重启
- DPDK l3fwd
- SQL Server 一个比较通用的分页存储过程
- 学习MFC的消息通信问题
- 学习MFC的消息通信问题
- silverlight下载文件
- [LeetCode][Java] Spiral Matrix
- CoreAnimation编程指南(五)图层内容
- 如何在改版的spring官网下载jar包问题
- SQLTUNE以及SQL_PLAN_BASELINE
- poj1149
- UITextView学习记录
- Unity3D研究之第一人称第三人称角色控制组件修改
- 从mysql导数据到sqlite,遇到单引号问题
- 简明vim 练级攻略
- CoreAnimation编程指南(四)图层树结构