使用这些Perl 函数控制数组和哈希

本文展示了Perl语言处理数组和哈希的强大函数,包括获取大小、检查键存在性、添加或删除元素等,提供了实用的示例代码。

转自:http://soft.zdnet.com.cn/software_zone/2005/0928/215375.shtml

Perl 虽因其字符串处理能力而闻名,但是这并不意味着 Perl 只能做字符串处理。这种语言还提供相当多的函数来处理和操纵其它的数据结构,其中包括很流行的数组和哈希。我们这篇文章展示了一些属于这一类的非常有用的函数,并简要解释了每个函数的工作方式以及使用它们的时机。
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 这个函数可以用来测试哈希中是否存在某个特定的键。 代码: 
#!/bin/perl

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

# check if key exists
if (exists $data) { 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 这个函数从一个哈希中删除一个键,以及与这个键关联的值。

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

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

# remove element with key 'king'
delete $data;
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 ";
}

输出: 
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值