一个数组只是一组标量.。它是由个别标量存储在一个单一变量的列表。你可以参考每个标内,使用数字索引列表。
数组变量的前缀@符号和填充使用任何括号或qw操作符,例如:
@array = (1, 2, 'Hello'); @array = qw/This is an array/;
第二条生产线使用的qw//运算符,它返回一个字符串列表,由空格分隔的字符串分开。在这个例子中,这导致了四元素的数组第一个元素是“this”和最后(四)是“array”。这意味着你可以使用规范内的换行符:
@days = qw/Monday Tuesday ... Sunday/;
我们也可以单独指定每个值填充数组:
$array[0] = 'Monday'; ... $array[6] = 'Sunday';
从数组中提取单个元素时,你必须在前面加上一个美元符号变量,然后追加后,方括号内的元素的索引的名称。例如:
#!/usr/bin/perl @shortdays = qw/Mon Tue Wed Thu Fri Sat Sun/; print $shortdays[1]; This will print Tue数组索引从零开始,所以在前面的例子实际上we.ve印有“星期二”。你也可以给,而不是开始一个负index.in这种情况下,你选择从最后的数组元素。
print $shortdays[0]; # Outputs Mon print $shortdays[6]; # Outputs Sun print $shortdays[-1]; # Also outputs Sun print $shortdays[-7]; # Outputs Mon
Perl提供了一个连续的数字和字母的捷径。而不是键入每个元素,例如,以100计数时,我们可以这样做:
#!/usr/bin/perl @10 = (1 .. 10); @100 = (1 .. 100; @1000 = (100 .. 1000); @abc = (a .. z); print "@10"; # Prints number starting from 1 to 10 print "@100"; # Prints number starting from 1 to 100 print "@1000"; # Prints number starting from 1 to 1000 print "@abc"; # Prints number starting from a to z
数组的大小可以决定在阵列上使用标量上下文 - 返回值将数组中的元素数量:
@array = (1,2,3); print "Size: ",scalar @array,"\n";
返回的值总是会阵列的物理尺寸,而不是有效的元素数量。可以证明这一点,标量,@array和$#array之间的区别,使用此片段:
#!/uer/bin/perl @array = (1,2,3); $array[50] = 4; print "Size: ",scalar @array,"\n"; print "Max Index: ", $#array,"\n"; This will return Size: 51 Max Index: 50
只有四个元素的数组中包含的信息,但数组是51元素长50指数(索引)最高,.
这里标量函数是用来执行标量上下文,使@数组可以返回数组的大小,否则将返回@阵列的所有在它contacined的元素的列表. |
使用添加/删除以下功能和元素:
push(): 数组的末尾添加一个元素.
unshift(): 添加一个元素的数组的开头.
pop(): 删除数组中最后一个元素.
shift() : 删除数组的第一个元素.
使用push()或shift()添加元素时,你必须指定两个参数,第一个数组名和第二个元素的名称添加。pop()或shift()删除一个元素,只需要您发送数组作为参数.
#!/usr/bin/perl # Define an array @coins = ("Quarter","Dime","Nickel"); print "First Statement : @coins"; print "\n"; # Add one element at the end of the array push(@coins, "Penny"); print "Second Statement : @coins - by www.gitbook.net"; print "\n"; # Add one element at the beginning of the array unshift(@coins, "Dollar"); print "Third Statement : @coins"; print "\n"; # Remove one element from the last of the array. pop(@coins); print "Fourth Statement : @coins"; print "\n"; # Remove one element from the beginning of the array. shift(@coins); print "Fifth Statement : @coins"; print "@coins"; Now this will produce following result First Statement : Quarter Dime Nickel Second Statement : Quarter Dime Nickel Penny Third Statement : Dollar Quarter Dime Nickel Penny Fourth Statement : Dollar Quarter Dime Nickel Fifth Statement : Quarter Dime Nickel
你也可以从一个数组中提取的“切片” - 也就是说,你可以选择多个项目,从一个数组,以产生另一个数组.
@weekdays = @shortdays[0,1,2,3,4];
的一个有效的指标清单,积极或消极的,每个片的规格必须以逗号分隔。为了操作速度,你也可以使用......范围操作符:
@weekdays = @shortdays[0..4];
范围也可以在列表:
@weekdays = @shortdays[0..2,6,7];
更换元素可能是splice()函数。 splice()的需要少数的参数和公式如下:
splice(@array,first-element,sequential_length, new elements)
从本质上讲,你送PERL的一个数组拼接,然后直接到起始元素计算通过,以取代有多少元素,然后填写缺少的元素与新的信息.
#!/usr/bin/perl @nums = (1..20); splice(@nums, 5,5,21..25); print "@nums";
这里实际更换后开始的第五元素,与6号开始。五个元素,然后替换从6-10号码21-25
与split函数,它是可以转换成一个字符串数组。要做到这一点,只需定义一个数组,并设置它等于一个分裂的功能。 Split函数需要两个参数,第一个字符的分裂和字符串变量.
#!/usr/bin/perl # Define Strings $astring = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $namelist = "Larry,David,Roger,Ken,Michael,Tom"; # Strings are now arrays. Here '-' and ',' works as delimeter -by www.gitbook.net @array = split('-',$astring); @names = split(',',$namelist); print $array[3]; # This will print Roses print "\n"; # This is a new line print $names[4]; # This will print Michael
同样,我们可以使用join()函数归队数组元素,形成一个长的串标.
#!/usr/bin/perl # Define Strings $astring = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $namelist = "Larry,David,Roger,Ken,Michael,Tom"; # Strings are now arrays. Here '-' and ',' works as delimeter @array = split('-',$astring); @names = split(',',$namelist); $string1 = join(",", @array); $string2 = join("-", @names); print $string1; print "\n" ; print $string2; This will produce following result Rain,Drops,On,Roses,And,Whiskers,On,Kittens Larry-David-Roger-Ken-Michael-Tom
sort()函数排序每个元素数组按照ASCII数字标准.
#!/usr/bin/perl # Define an array @foods = qw(pizza steak chicken burgers); print "Before sorting: @foods\n"; # Sort this array @foods = sort(@foods); print "After sorting: @foods\n -by www.gitbook.net"; This will produce following result Before sorting: pizza steak chicken burgers After sorting: burgers chicken pizza steak
请注意,基于ASCII的话数值进行排序。所以最好的办法是先转换成小写字母数组的每个元素,然后执行排序功能. |
$[是一个特殊的变量。这个特别的变量是一个标量,包含所有阵列的第一个索引。因为Perl数组从零开始的索引,几乎始终为0。但是,如果你设置$[1,那么你所有的阵列将使用的索引。建议不要使用除零以外的任何其他索引.
名单实际上是一种特殊的数组类型 - 基本上,列表是一个临时的结构,拥有一系列值。列表清单中可以使用括号和逗号运算符生成的“手”,
@array = (1,2,3);
或者它可以是一个函数或变量返回的值时,在列表环境计算:
print join(',' @array);
在这里,@array正在计算在列表上下文中,因为连接函数预期的列表.
因为仅仅是一个逗号分隔的值的序列的列表,你可以结合列表的同时并:
@numbers = (1,3,(4,5,6));
嵌入的清单只是成为主要list.this的一部分,也意味着我们可以结合在一起阵列:
@numbers = (@odd,@even);
返回列表也可以嵌入到产生一个单一的,最终名单的功能:
@numbers = (primes(),squares());
列表符号是相同的阵列 - 你可以从数组中提取元素,由方括号内追加到列表中,并给予一个或多个索引:
#!/usr/bin/perl $one = (5,4,3,2,1)[4]; print "Value of \$one is $one\n - by www.gitbook.net " This will produce follwoing result Value of $one is 1
同样,我们可以提取片,虽然没有领先@character的要求:
#!/usr/bin/perl
@newlist = (5,4,3,2,1)[1..3];
print "value of new list is @newlist\n";
This will produce follwoing result
value of new list is 4 3 2