Perl初级教程 - 第四天


 

 

 

 

第二页:关联数组

顺序表数组允许我们按照数字对其元素进行访问。数组@food的第一个元素是$food[0],第二个元素是$food[1],等等。但是Perl也允许我们建立可以通过字符串进行访问的数组,称为关联数组(associative arrays)。

我们用括号定义关联数组,但是数组名前有一个%符号。假设我们建立一个关于人和他们的年龄的数组,则可以这样:

%ages = ("Michael Caine", 39,
         "Dirty Den", 34,
         "Angie", 27,
         "Willy", "21 in dog years",
         "The Queen Mother", 108);

现在我们可以这样找到人们的年龄:

$ages{"Michael Caine"};		# Returns 39
$ages{"Dirty Den"};		# Returns 34
$ages{"Angie"};			# Returns 27
$ages{"Willy"};			# Returns "21 in dog years"
$ages{"The Queen Mother"};	# Returns 108

访问单个元素时用$,而不是% - 因为单个元素是标量。关联数组的索引包含在花括号内。

可以通过把关联数组赋给一个表数组变量把关联数组转换为表数组。表数组也可以转换为关联数组 - 通过把它赋值给关联数组变量。理想地,表数组将有偶数个元素:

@info = %ages;		# @info is a list array. It
			# now has 10 elements
$info[5];		# Returns the value 27 from
			# the list array @info
%moreages = @info;	# %moreages is an associative
			# array. It is the same as %ages

操作符

关联数组的元素没有顺序(有点象hash表),但是可以通过keys函数和values函数轮流访问所有的元素:

foreach $person (keys %ages)
{
	print "I know the age of $person\n";
}
foreach $age (values %ages)
{
	print "Somebody is $age\n";
}

当keys被调用时,返回关联数组的keys的列表。当values被调用时,返回数组的值的列表。这两个函数返回的列表的顺序相同,但是这个顺序与元素被输入的顺序没有关系。

当keys和values在一个标量环境中被调用时,它们返回关联数组中的key/value对的数目。

有一个each函数返回一个关键字和其值的两个元素的列表。每调用each一次,它返回另一个key/value对:

while (($person, $age) = each(%ages))
{
	print "$person is $age\n";
}

环境变量

当在UNIX中运行perl程序或任何script时,会遇到某些环境变量。比如,USER包含你的用户名,DISPLAY确定图形使用的屏幕。当在WWW中运行perl CGI script时,也有环境变量存储其它有用的信息。所有这些变量和它们的值存储在关联数组%ENV中,其关键字为变量名。可以试试这个perl程序:

print "You are called $ENV{'USER'} and you are ";
print "using display $ENV{'DISPLAY'}\n";

>>

Perl初级教程
第一页 Split
第二页 关联数组
第三页 子过程

[第1天][第2天][第3天][第4天]

 



本文根据 网猴 相关文章改编,版权归原作者所有。