您的位置:首页 > 其它

perl基础:使用这些Perl 函数控制数组和哈希

2008-03-18 17:40 501 查看
Perl 虽因其字符串处理能力而闻名,但是这并不意味着 Perl只能做字符串处理。这种语言还提供相当多的函数来处理和操纵其它的数据结构,其中包括很流行的数组和哈希。我们这篇文章展示了一些属于这一类的非 常有用的函数,并简要解释了每个函数的工作方式以及使用它们的时机。

函数解释示例
scalar(@arr)这个函数将一个数组或哈希强迫解释成一个标量。当你需要得到一个数组或哈希的元素个数时,这一函数非常有用。

使用这个函数获取数组或哈希的大小,为循环以及处理数组或哈希内容做准备。
代码:
#!/bin/perl

# define array
@data = ('apple', 'peach', 'banana');

# get size
print "The array has " . scalar(@data) . " elements";

输出:
The array has 3 elements
exists $hash{$key}这个函数可以用来测试哈希中是否存在某个特定的键。代码:
#!/bin/perl

# define hash
%data = ('king' => 'queen', 'prince' => 'princess');

# check if key exists
if (exists $data{'king'}) { print "Found!";
}

输出:
Found!
push(@arr, $val)这个函数向数组的末尾添加一个新元素。代码:
#!/bin/perl

# define array
@data = ('a', 'b', 'c');

# add element
push(@data, 'd');

输出:
a b c d
pop(@arr)这个函数从数组的末尾删除一个元素。代码:
#!/bin/perl

# define array
@data = ('a', 'b', 'c');

# add element
pop(@data);
print "@data ";

输出:
a b
unshift(@arr, $val)这个函数向数组的开头添加一个新元素。代码:
#!/bin/perl

# define array
@data = ('a', 'b', 'c');

# add element
unshift(@data, 'z');
print "@data ";

输出:
z a b c
shift(@arr)这个函数从数组的开头删除一个元素。代码:
#!/bin/perl

# define array
@data = ('a', 'b', 'c');

# remove element
shift(@data);
print "@data ";

输出:
b c
splice(@arr, $offset, $length, @arr2)这个函数删除数组中的某一个子集,被删除的子从$offset指定的位置开始,长度为$length个元素。如果可选参数@arr2出现,那么被提取的一段元素将会替换为数组@arr2。

使用这个函数可以提取数组的一个子集,也可以使用新值替换一个数组中的某些元素。
代码:
#!/bin/perl

# define array
@data = ('king', 'queen', 'knight', 'bishop');

# remove middle elements
splice(@data, 1, 2);
print "@data ";

输出:
king bishop
delete $hash{$key}这个函数从一个哈希中删除一个键,以及与这个键关联的值。

使用这个函数可以从哈希中删除元素。
代码:
#!/bin/perl

# define hash
%data = ('king' => 'queen', 'prince' => 'princess');

# remove element with key 'king'
delete $data{'king'};
split($delim, $str)这个函数使用$delim将一个字符串分解,并返回一个以数字为索引的数组,返回数组的元素为原始字符串中由$delim分隔的各个部分。这些元素可以在一个循环中处理。

使用这个函数可以将逗号分隔的列表分割成独立的数组元素。
代码:
#!/bin/perl

# define string
$str = "cat,hog,dog,log";

# split string on comma delimiter
@words = split(",", $str);
foreach $w (@words) {
print "$w/n";
}

输出:
cat
hog
dog
log
join($sep, @arr)这个函数将一个数组的各个元素组合成一个单一的字符串,原来的各个元素使用$sep的值分隔。

使用这个函数可以将多个独立的数组元素组合成一个单一的字符串,而新组合成的字符串由空格、逗号或其它分隔符隔开。
代码:
#!/bin/perl

# define array
@data = ("Harry", "Joan", "Tom");

# create string from arrayprint join(" and ", @data) . " are friends";

输出:
Harry and Joan and Tom are friends
keys(%hash)这个函数将哈希的键返回为一个以数字为索引的数组。这个函数与下面将要讨论的values()函数功能正好相对。

使用这个函数可以将一个哈希的键提取为一个独立的数据结构,用于以后的处理。
代码:
#!/bin/perl

# define hash
%data = ('a' => 'apple', 'b' => 'bat', 'c' => 'cat');

# get and print hash keys
@keys = keys(%data);

输出:
c a b
values(%hash)这个函数将哈希的值返回为一个以数字为索引的数组。这个函数与前面讨论的keys()函数功能正好相对。

使用这个函数将一个哈希的值提取为一个独立的数据结构,用于以后的处理。
代码:
#!/bin/perl

# define hash
%data = ('a' => 'apple', 'b' => 'bat', 'c' => 'cat');

# get and print hash keys
@vals = values(%data);
foreach $v (@vals) {
print "$v ";
}

输出:
cat apple bat
reverse(@arr)这个函数将数组元素的次序翻转,将最后一个元素放在第一个,同样,将第一个元素放在最后。

使用这个函数可以将数组的元素的顺序调整为与当前顺序完全相反。
代码:
#!/bin/perl

# define array
@data = ('apple', 'peach', 'banana');

# reverse array
@rev = reverse(@data);
print "@rev ";

输出:
banana peach apple
sort(@arr)这个函数可以用来对数组或哈希进行排序。缺省情况下,这个函数使用标准的字符串对比规则进行排序;然而,你可以通过传入一个自定义排序子函数的名字来覆盖其缺省行为。

使用这个函数可以重置数组元素的内部顺序,或者以字母序、数字序或者自定义序来重新排列数组。
代码:
#!/bin/perl

# define hash
@data = ('oranges', 'peaches', 'grapes', 'apples', 'lemons');

# sort alphabetically
@sorted = sort(@data);
print "@sorted ";

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