数组是一个存储标量值的有序列表的变量.数组变量前面有"at"(@)符号.要引用数组的单个元素,您将使用带有变量名的美元符号($),后跟方括号中元素的索引.
这是一个简单的示例使用数组变量 :
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("John Paul", "Lisa", "Kumar"); print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";
这里我们在$ sign之前使用了逃逸符号(\)来打印它.其他Perl会将其理解为变量并打印其值.执行时,这将产生以下结果 :
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = John Paul $names[1] = Lisa $names[2] = Kumar
在Perl中,列表和数组术语通常被用作可互换的术语.但列表是数据,数组是变量.
数组变量以@为前缀.使用括号或qw运算符填充符号.例如 :
@array = (1, 2, 'Hello'); @array = qw/This is an array/;
第二行使用qw//运算符,它返回一个字符串列表,用空格分隔分隔的字符串.在这个例子中,这导致了一个四元素阵列;第一个元素是'this',last(第四个)是'array'.这意味着您可以使用不同的行,如下所示;
@days = qw/Monday Tuesday ... Sunday/;
您也可以通过分别按以下方式分配每个值来填充数组;
$array[0] = 'Monday'; ... $array[6] = 'Sunday';
从数组访问单个元素时,必须在变量前加上美元符号( $)然后将元素索引附加在变量名称后面的方括号内.例如 :
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; print "$days[0]\n"; print "$days[1]\n"; print "$days[2]\n"; print "$days[6]\n"; print "$days[-1]\n"; print "$days[-7]\n";
这将产生以下结果 :
Mon Tue Wed Sun Sun Mon
数组索引从零开始,因此要访问您需要将0作为索引的第一个元素.您还可以给出负索引,在这种情况下,您可以从数组的末尾而不是从头开始选择元素.这意味着以下 :
print $days[-1]; # outputs Sun print $days[-7]; # outputs Mon
Perl提供顺序数字和字母的快捷方式.例如,在计数为100时,我们可以执行以下操作,而不是键入每个元素,而不是;
#!/usr/bin/perl @var_10 = (1..10); @var_20 = (10..20); @var_abc = (a..z); print "@var_10\n"; # Prints number from 1 to 10 print "@var_20\n"; # Prints number from 10 to 20 print "@var_abc\n"; # Prints number from a to z
这里双点(..)被称为范围运算符.这将产生以下结果 :
1 2 3 4 5 6 7 8 9 10 10 11 12 13 14 15 16 17 18 19 20 a b c d e f g h i j k l m n o p q r s t u v w x y z
可以使用以下方法确定数组的大小数组上的标量上下文 - 返回的值将是数组中元素的数量 :
@array = (1,2,3); print "Size: ",scalar @array,"\n";
返回的值始终是数组的物理大小,而不是有效元素的数量.你可以证明这一点,并且scalar@ array和$#array之间的区别,使用这个片段如下 :
#!/usr/bin/perl @array = (1,2,3); $array[50] = 4; $size = @array; $max_index = $#array; print "Size: $size\n"; print "Max Index: $max_index\n";
这将产生以下结果 :
Size: 51 Max Index: 50
数组中只有四个元素包含信息,但数组长度为51个元素,索引最高50.
Perl提供了许多有用的函数来添加和删除数组中的元素.您可能有一个问题是什么功能?到目前为止,您已使用 print 函数来打印各种值.类似地,还有各种其他函数或有时称为子例程,它们可用于各种其他功能.
Sr.No. | 类型&说明 |
---|---|
1 | push@ ARRAY,LIST 将列表的值推送到数组的末尾. |
2 | pop@ ARRAY 弹出并返回数组的最后一个值. |
3 | shift@ ARRAY 关闭数组的第一个值并将其返回,将数组缩短1并将所有内容都缩小. |
4 | unshift@ ARRAY,LIST 预先列出数组前面的列表,并返回元素数量在新数组中. |
#!/usr/bin/perl # create a simple array @coins = ("Quarter","Dime","Nickel"); print "1. \@coins = @coins\n"; # add one element at the end of the array push(@coins, "Penny"); print "2. \@coins = @coins\n"; # add one element at the beginning of the array unshift(@coins, "Dollar"); print "3. \@coins = @coins\n"; # remove one element from the last of the array. pop(@coins); print "4. \@coins = @coins\n"; # remove one element from the beginning of the array. shift(@coins); print "5. \@coins = @coins\n";
这将产生以下结果 :
1. @coins = Quarter Dime Nickel 2. @coins = Quarter Dime Nickel Penny 3. @coins = Dollar Quarter Dime Nickel Penny 4. @coins = Dollar Quarter Dime Nickel 5. @coins = Quarter Dime Nickel
您还可以提取"切片"从数组中 - 也就是说,您可以从数组中选择多个项目以生成另一个数组.
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; @weekdays = @days[3,4,5]; print "@weekdays\n";
这将产生以下结果 :
Thu Fri Sat
切片的规范必须包含有效索引的列表,无论是正数还是负数,每个都用逗号分隔.对于速度,您还可以使用 .. 范围运算符 :
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; @weekdays = @days[3..5]; print "@weekdays\n";
这将产生以下结果 :
Thu Fri Sat
现在我们将再介绍一个名为 splice()的函数,具有以下语法 :
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
此函数将删除由OFFSET和LENGTH指定的@ARRAY元素,并将其替换为LIST(如果已指定).最后,它返回从数组中删除的元素.以下是示例 :
#!/usr/bin/perl @nums = (1..20); print "Before - @nums\n"; splice(@nums, 5, 5, 21..25); print "After - @nums\n";
这将产生以下结果 :
Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
这里,实际的替换从第6个数字开始,之后五个元素从6到10替换为数字21,22,23,24和25.
让我们再看一个名为 split()的函数,该函数具有以下语法 :
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
这function将字符串拆分为字符串数组,并返回它.如果指定了LIMIT,则最多分成该数量的字段.如果省略PATTERN,则拆分空格.以下是示例 :
#!/usr/bin/perl # define Strings $var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom"; # transform above strings into arrays. @string = split('-', $var_string); @names = split(',', $var_names); print "$string[3]\n"; # This will print Roses print "$names[4]\n"; # This will print Michael
这将产生以下结果 :
Roses Michael
我们可以使用 join( )函数重新加入数组元素并形成一个长标量字符串.此函数具有以下语法 :
join EXPR, LIST
此函数将单独的LIST字符串连接成一个字符串,字段由EXPR的值分隔,并返回字符串.以下是示例 :
#!/usr/bin/perl # define Strings $var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom"; # transform above strings into arrays. @string = split('-', $var_string); @names = split(',', $var_names); $string1 = join( '-', @string ); $string2 = join( ',', @names ); print "$string1\n"; print "$string2\n";
这将产生以下结果 :
Rain-Drops-On-Roses-And-Whiskers-On-Kittens Larry,David,Roger,Ken,Michael,Tom
sort()函数根据ASCII数字标准对数组的每个元素进行排序.此函数具有以下语法 :
sort [ SUBROUTINE ] LIST
此函数对LIST进行排序并返回已排序的数组值.如果指定了SUBROUTINE,则在对元素进行排序时应用SUBTROUTINE中的指定逻辑.
#!/usr/bin/perl # define an array @foods = qw(pizza steak chicken burgers); print "Before: @foods\n"; # sort this array @foods = sort(@foods); print "After: @foods\n";
这将产生以下结果 :
Before: pizza steak chicken burgers After: burgers chicken pizza steak
请注意,排序是根据单词的ASCII数值执行的.因此,最好的选择是首先将数组的每个元素转换为小写字母,然后执行排序函数.
到目前为止,您已经看到我们在程序中定义的简单变量,并使用它们来存储和打印标量和数组值. Perl提供了许多特殊变量,它们具有预定义.
我们有一个特殊变量,写成 $ [.此特殊变量是包含所有数组的第一个索引的标量.因为Perl数组具有从零开始的索引,所以$ [几乎总是为0.但是如果将$ [设置为1,那么所有数组都将使用基于索引的索引.建议不要使用除零之外的任何其他索引.但是,让我们举一个例子来说明$ [变量和减号;
#!/usr/bin/perl # define an array @foods = qw(pizza steak chicken burgers); print "Foods: @foods\n"; # Let's reset first index of all the arrays. $[ = 1; print "Food at \@foods[1]: $foods[1]\n"; print "Food at \@foods[2]: $foods[2]\n";
这将产生以下结果 :
Foods: pizza steak chicken burgers Food at @foods[1]: pizza Food at @foods[2]: steak
因为数组只是逗号分隔的值序列,所以可以将它们组合在一起,如下所示 :
#!/usr/bin/perl @numbers = (1,3,(4,5,6)); print "numbers = @numbers\n";
这将产生以下结果 :
numbers = 1 3 4 5 6
嵌入式阵列刚刚成为主阵列的一部分,如下图所示 :
#!/usr/bin/perl @odd = (1,3,5); @even = (2, 4, 6); @numbers = (@odd, @even); print "numbers = @numbers\n";
这将产生以下结果 :
numbers = 1 3 5 2 4 6
列表表示法与数组表示法相同.您可以通过在列表中附加方括号并提供一个或多个索引&minus来从数组中提取元素;
#!/usr/bin/perl $var = (5,4,3,2,1)[4]; print "value of var = $var\n"
这将产生以下结果 :
value of var = 1
类似地,我们可以提取切片,尽管没有对领导者和职员的要求;字符 :
#!/usr/bin/perl @list = (5,4,3,2,1)[1..3]; print "Value of list = @list\n";
这将产生以下结果 :
Value of list = 4 3 2