Perl中的变量和数组
perl变量主要分为三类:
标量、数组和哈希(即关联数组)。perl根据第⼀个字符来区分变量名
标量变量
$var  标量变量
$var
数组变量 :
@var  数组变量 :
@var
@加上数组名来表⽰⼀个数组;Perl中的数组下标是从“0”开始;
不必是同⼀数据类型。@array = (1,2,3,'red');
Perl中的数组元素不必是同⼀数据类型
使⽤[]引⽤数组中第⼏个元素。$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+1就代表数组的长度。
注意exists的用法
⼦数组⽚段:
原来数组 @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 赋值
可以使⽤如下的语法在hash 之间拷贝:
%new_hash = %old_hash;
将hash转变成其它形式更加常见。例如,我们可以将hash反转:
%inverse_hash = reverse %any_hash;
.⼤箭头符号(=>)
%h=('a',1,'b',2);
⽤数组初始化%h为a=>1,b=>2  %h=('a',1,'b',2);
⽤数组初始化%h为a=>1,b=>2
当给hash赋值时,有时并不明显哪些元素是keys,那些是values,因此发明了⼤箭头符号(=>)。在需要逗号的时候,都可以使⽤⼤箭头符号替换。
如:
my %last_name = (
"www" => 1,
"eee" => 2,
);
哈希函数
哈希函数
某些有⽤的函数可以对整个hash 进⾏操作。
1.keys和values函数
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函数
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";
}
四、哈希的通常⽤法
四、哈希的通常⽤法
要查看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 函数
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 元素的内插
3.hash 元素的内插
你可以在双引号的字符串中使⽤单个hash元素,但不⽀持整个hash 的内插。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
print "$key => $hash{$key}\n";
}
部分源⾃linux.chinaunix/techdoc/net/2008/07/06/1015218.shtml
哈希分⽚(hash  splice)
⽤法 : @hash{'A','C','E'}    所谓散列分⽚,是⼀组散列键的列表
%hash= (
"A"=> "1",
"B" => "2",
"C" => "3"
);
@New_value=qw/4 5 6/;
@hash{'D', 'E', 'F'}=@New_value;
@slice=@hash{'A','C','E'};
print "The new values from the hash slice are: @slice\n\n";
print "The hash now looks like this:\n";
foreach $key ( sort keys %hash){
printf "Key: %-10sValue: %-15s\n", $key, $hash{$key};
}
对⽐数组⽚段
@Arr=('A', 'B', 'C', 'D' );      #定义都是( )
@Brr=@Arr[1,2,3];    #这⾥1 2 3 是下标,相当于上⾯的键。⽤[ ]  ,上⾯哈希⽚段⽤{ } print "@Brr\n\n";
($Crr[0], $Crr[1], $Crr[2])=@Arr;
print "@Crr\n";
显⽰
B C D
A B C
map
map EXPR, LIST;
map {BLOCK} LIST;
map函数能把数组中的每个元素值映射到表达式或者块中,并返回另⼀个数组。
@n = (2, 4, 6, 8);
@n = map {$_ * 2}  @n; print "@n\n";
@n = (2, 4, 6, 8);
@n = map $_ * 2,  @n; print "@n\n";
都⼀样,输出
4,8,12,16

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。