首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Perl中的变量和数组

Perl中的变量和数组

perl变量主要分为三类:

标量、数组和哈希(即关联数组)。perl根据第一个字符来区分变量名


$var  标量变量


@var  数组变量 :


@加上数组名来表示一个数组erl中的数组下标是从“0”开始;


Perl中的数组元素不必是同一数据类型。@array = (1,2,3,'red');


使用[]引用数组中第几个元素。$array[0]是1,

$array[3]

'red'。赋值:

$array[4] = ‘four’;


为确定一个数组中的最后一个元素的位置,可以使用
$#array
语法。


@array = (1,2,3,4,5,6,7,8,9);  

$#array等于8  因为array[8]==9;   


注意$#array+1就代表数组的长度。



子数组片段:


原来数组

@array = (a,b,c,d,e,f,g,h,i);  


进行下列操作后,@array[0,1,2]
= ('z','z','z');  以后 变成了

@array == (z,z,z,d,e,f,g,h,i);  



splice


splice(@array,2,6); #目标数组, 起始位置,删除长度.


原来数组是12abcdef56789, 执行过后是1256789


splice(目标数组, 起始位置,删除长度,替换元素1,替换元素2(个数不一定要和删除元素相等)...);


@array=(1..9);
my @e=("a".."f");
splice(@array,2,2,@e,'A','B');

将会得到12abcdefAB56789。
本来是从$array[2]开始删除两个,3、4。现在提供了替换值,则从原来的3开始替换。将3替换为@e,将4替换为'A’,然后多出来的替换值'B'插入到5之前。


reverse函数的功能是颠倒数组,它可以把数组元素的顺序头尾颠倒。


@array=(1..9);


@array= reverse(@array);  现在@array==(9,8,7,6,5,4,3,2,1);




sort函数:


1.基本语法
@sorted = sort {regular} @nosort;
2.一般用法
@sorted = sort(@nosort);  



按字符顺序从小到大

@sorted = reverse sort(@nosort);  





从大到小

$a<=>$b   >>>数字从大到小
$a cmp $b >>>字母从大到小
$b <=> $a >>>数字从小到大
$b cmp $a >>>字母从小到大


@array=(8,2,32,1,4,16);
print "sort{$a<=>$b}@array)\n";





%var 哈希


要访问hash 元素用

$hash

{

keyname

}
访问


Hash 赋值
可以使用如下的语法在hash 之间拷贝:
%new_hash = %old_hash;
将hash转变成其它形式更加常见。例如,我们可以将hash反转:
%inverse_hash = reverse %any_hash;


.大箭头符号(=>)



用数组初始化%h为a=>1,b=>2  %h=('a',1,'b',2);
当给hash赋值时,有时并不明显哪些元素是keys,那些是values,因此发明了大箭头符号(=>)。在需要逗号的时候,都可以使用大箭头符号替换。
如:
my %last_name =
(
"www" => 1,
"eee" => 2,
);



哈希函数
某些有用的函数可以对整个hash 进行操作。
1.keys和values函数
keys函数会返回此hash的所有keys,values函数将返回所有的values。如果hash中没有元素,则此函数将返回空列表。
my %hash = ("a"=>1, "b"=>2, "c"=>3);
print my @k = keys %hash;
print my @v = values %hash;


each函数
如果想迭代hash的每一个元素,一种通常的方法是使用each函数,它将返回key/value对应的2个元素列表。
当对同一个hash 函数进行一次迭代时,将返回下一个key/value对,直到所有的元素均被访问。如果没有更多的key/value对,则each函数将返回空表。
my %hash = ("a"=>1, "b"=>2, "c"=>3);
while(($key, $value) = each %hash)
{




print "$key => $value\n";
}
当然,each返回的key/vlaue对,顺序是混乱的(它其顺序和keys和values函数返回的顺序相同)。如果想将其按序排放,可以对它们排序(使用sort)。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{




$value =$hash{$key};




print "$key => $value\n";
}
四、哈希的通常用法
1.exists函数
要查看hash中是否存在某个key,可以使用exists函数,如果hash中存在此key,则返回true,与是否有对应的value无关。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
if(exists $hash{'a'})
{




print "true";
}
2.delete 函数
delete函数将某个给定的key(包括其对应的value)从hash中删除。如果不存在这个key,则什么也不做,不会有警告或者错误信息。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
delete $hash{'a'};
foreach $key (sort keys %hash)
{




$value =$hash{$key};




print "$key => $value\n";
}
3.hash 元素的内插
你可以在双引号的字符串中使用单个hash元素,但不支持整个hash 的内插。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{




print "$key => $hash{$key}\n";
}

返回列表