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 |