perl变量主要分为三类:
如:
my %last_name = (
"www" => 1,
"eee" => 2,
);
@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根据第一个字符来区分变量名
$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
$b
$b
@array=(8,2,32,1,4,16);
print "sort{$a<=>$b}@array)\n";
print "sort{$a<=>$b}@array)\n";
%var 哈希
要访问hash 元素用
$hash
{
keyname
} 访问
Hash 赋值
可以使用如下的语法在hash 之间拷贝:
%new_hash = %old_hash;
将hash转变成其它形式更加常见。例如,我们可以将hash反转:
%inverse_hash = reverse %any_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;
某些有用的函数可以对整个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";
}
如果想迭代hash的每一个元素,一种通常的方法是使用each函数,它将返回key/value对应的2个元素列表。
当对同一个hash 函数进行一次迭代时,将返回下一个key/value对,直到所有的元素均被访问。如果没有更多的key/value对,则each函数将返回空表。
my %hash = ("a"=>1, "b"=>2, "c"=>3);
while(($key, $value) = each %hash)
{
}
当然,each返回的key/vlaue对,顺序是混乱的(它其顺序和keys和values函数返回的顺序相同)。如果想将其按序排放,可以对它们排序(使用sort)。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
}
四、哈希的通常用法
1.exists函数
要查看hash中是否存在某个key,可以使用exists函数,如果hash中存在此key,则返回true,与是否有对应的value无关。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
if(exists $hash{'a'})
{
}
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)
{
}
3.hash 元素的内插
你可以在双引号的字符串中使用单个hash元素,但不支持整个hash 的内插。
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
}
部分源自http://linux.chinaunix.net/techdoc/net/2008/07/06/1015218.shtml
哈希分片(hash splice)
用法 :
@hash{'A','C','E'}
所谓散列分片,是一组散列键的列表
%hash= (
"A"=> "1",
"B" => "2",
"C" => "3"
);
}
对比数组片段
@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