您的位置:首页 > 其它

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)

语句以分号(;)结尾。

举例

#!/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";

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: