当前位置:首页 » Perl » Perl数组

Perl数组

Perl数组变量,实例,使用例子在线教程:标量变量简单变量只包含一个元素 - 一个字符串或数字。

一个数组只是一组标量.。它是由个别标量存储在一个单一变量的列表。你可以参考每个标内,使用数字索引列表。

数组创建:

数组变量的前缀@符号和填充使用任何括号或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