Perl中的变量和数组

来源:互联网 发布:数据库的逻辑设计例题 编辑:程序博客网 时间:2024/06/11 13:06
perl变量主要分为三类:
标量、数组和哈希(即关联数组)。perl根据第一个字符来区分变量名
$var 标量变量
@var  数组变量:
@加上数组名来表示一个数组;Perl中的数组下标是从“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";
}
部分源自http://linux.chinaunix.net/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};
}

Perl中的变量和数组


对比数组片段

@Arr=('A', 'B', 'C', 'D' );     #定义都是( )
@Brr=@Arr[1,2,3];    #这里1 23 是下标,相当于上面的键。用[ ]  ,上面哈希片段用{ }
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
0 0
原创粉丝点击