原文:http://perl5maven.com/perl-arrays


在本篇Perl教程中,我们将会学习Perl中的数组.本文只是对Perl中的数组进行了一下概述,在以后的文章中,我们还会更加详细的讲解.

在Perl中,数组类型的变量名称以@符号开头.

因为我们坚决要求在自己的代码中使用严格模式(use strict),所以在使用数组变量前,你必须使用my关键字来声明它.

要注意,我们假定本文中所有的代码示例都已经包含了下面这样的文件头:

use strict;use warnings;use 5.010;

首先,声明一个数组变量是这样写的:

my @names;

然后是声明变量的同时并进行初始化:

my @names=("Foo","Bar","Baz");

打印数组

use Data::Dumper qw(Dumper);

my @names = ("Foo","Bar","Baz");say Dumper \@names;

输出结果如下:

$VAR1 =['Foo','Bar','Baz'];

遍历数组

my @names = ("Foo","Bar","Baz");foreach my $n (@names){  say $n;}

输出结果如下:

FooBarBaz

访问数组元素

my @names = ("Foo","Bar","Baz");say $names[0];

这里需要特别注意的是:当访问某单个的数组元素的时候,变量名的前导符号应该使用$,而不是原来的@.有些人也许不理解为什么要这么做,但其实原因也很简单.

你只需要理解:@符号表示双数,而$符号表示单数.当访问单个的数组元素时,该元素表现的完全和普通标量变量相同,所以要用$.

获取数组中的最大索引号

数组的索引号最小从0开始,最大索引号的值可以通过$#name_of_the_array变量获取到,所以:

my @names = ("Foo","Bar","Baz");say $#names;

会输出2,因为数组的索引号只有3个:0,1,2.

计算数组长度

在Perl中,并没有一个专门用来获取数组长度的函数,但是还是可以通过其他方法获取到的.第一种办法就是:数组的长度其实就是数组的最大索引号加1,因此,如果想获取上例中的数组(@names)的长度,则可以使用表达式$#names+1来计算得出.

另外,还可以使用scalar函数来获取数组的长度:

my @names = ("Foo","Bar","Baz");say scalar @names;

上例将会输出3.

遍历数组索引

在某些情况下,我们不光需要遍历到数组元素的值,还需要遍历到元素值对应的索引.这种情况下,我们就需要这么做:

my @names = ("Foo","Bar","Baz");foreach my $i (0.. $#names) {say "$i - $names[$i]";}

输出结果如下:

0-Foo1-Bar2-Baz

Push函数

push函数会在原数组的最右边插入一个新的数组元素.

use Data::Dumper qw(Dumper);

my @names = ("Foo","Bar","Baz");push @names,'Moo';

say Dumper \@names;

输出结果如下:

$VAR1 =['Foo','Bar','Baz','Moo'];

Pop函数

pop函数会从原数组中删除最右边的那个数组元素,并且返回删掉的那个元素.

use Data::Dumper qw(Dumper);

my @names = ("Foo","Bar","Baz");my $last_value = pop @names;say "Last: $last_value";say Dumper \@names;

输出结果如下:

Last:Baz$VAR1 =['Foo','Bar',];

shift函数

shift函数会从原数组中删除最左边的那个数组元素,并且返回删掉的那个元素.

use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");

my $first_value = shift @names;say "First: $first_value";say Dumper \@names;

输出结果如下:

First:Foo$VAR1 =['Bar','Baz',];

[译]Perl中的数组相关推荐

  1. Perl中判断数组或hash为空

    Perl中没有bool类型 perl中没有bool类型,所有的判断都是通过数字类型和字符串类型来进行的. 哪些类型为false 标量只有三种,数字0,空字符串"", 字符串'0'( ...

  2. alxctools索引超出了数组界限_[译]V8中的数组类型

    译者:蒋海涛 JavaScript 对象可以和任何属性有关联.对象属性的名称可以包含任何字符.有趣的是 JavaScript 引擎可以选择名称为纯数字的属性来进行优化,而这个属性其实就是数组 inde ...

  3. java在循环中删除数组元素,在循环Perl中删除数组中的元素

    好吧,这是处理问题的一种方法(在某种程度上我理解你想做什么) . 每当您需要回答有关成员资格的问题时,您可能希望使用哈希值 . use strict; use warnings; my @array1 ...

  4. perl数组硬引用_Perl基础 Perl引用和数组用法解析

    本文和大家重点讨论一下Perl引用和数组的概念,Perl5中的两种Perl引用类型为硬引用和符号引用.符号引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UN ...

  5. perl 哈希数组的哈希_第一个元素使用哈希在数组中出现K次

    perl 哈希数组的哈希 Prerequisite: Hashing data structure 先决条件: 哈希数据结构 Problem statement: 问题陈述: Find the fir ...

  6. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在

    前言 检索一个字符串是否存在于一个数组中, 最基本的想法应该就是对数组进行循环, 逐个判断数组的每个元素值和给定的值是否相等. (在Java语言还可以把数组转成 List , 在 list 中直接有 ...

  7. Perl中怎样从数组中删除某个值?

    我不确定undef是否和从数组中消除值有确切的关系,猜测一下,如果我们将undef视为"空",那么会有一些联系.但通常来说,将某些东西赋值为undef和删除某些东西是不一样的. 首 ...

  8. [译] ES6+ 中的 JavaScript 工厂函数(第八部分)

    本文讲的是[译] ES6+ 中的 JavaScript 工厂函数(第八部分), 原文地址:JavaScript Factory Functions with ES6+ 原文作者:Eric Elliot ...

  9. Perl 中的正则表达式

    9 Perl 中的正则表达式正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握 ...

最新文章

  1. π是无理数证明定积分_证明圆周率是无理数很容易?人类花了2000年!
  2. docker 鱼龙混杂之基础操作篇
  3. 吴恩达、谷歌、Facebook纷纷开源研究数据集
  4. 泛型技巧系列:简单类型选择器
  5. jeecms导入myeclipse时web-inf下html出错,我部署到myeclipse 出现问题
  6. 计算机原理与技术索引的应用,经常学一点计算机底层原理系列之索引
  7. linux 用户创建,权限,分组
  8. 智能穿戴市场群雄逐鹿,OPPO入局能没有杀手锏?
  9. tomocat设置首次访问时的页面
  10. (转)使用CUnit进行单元测试和覆盖率统计
  11. dll反编译工具ILspy下载及使用
  12. vue3 + typescript + echarts后端动态获取数据显示问题总结
  13. 【深度学习之美笔记】人工“碳”索意犹尽,智能“硅”来未可知(入门系列之二)
  14. Luogu5339 [TJOI2019]唱、跳、rap和篮球 【生成函数,NTT】
  15. php iphone图片旋转图片,php识别翻转iphone拍摄的颠倒图片
  16. XCTF-PWN welpwn
  17. System.IO.FileNotFoundException: Could not load file or assembly ‘System.Data.SQLite.dll‘ or one of
  18. java中图标_java中图标按钮
  19. 【大学物理·恒定电流的磁场】磁感应强度
  20. Dockerflie概述

热门文章

  1. 老杨和驳客都在胡言乱语——千条道理不如一个事实
  2. 开源的 Snort 入侵检测系统中存在高危漏洞
  3. 工业互联网巨头 GE Digital 修复SCADA 软件中的两个高危漏洞
  4. Atlassian 域名被曝一次点击账户接管漏洞 可导致供应链攻击
  5. spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)
  6. 【安全牛学习笔记】COCAT
  7. Golang学习(10)——bufio包
  8. [HeadFirst-HTMLCSS入门][第十章div,span]
  9. ubuntu新建一个账户并将其加入sudo用户组
  10. 配置系列:(事物管理)ssm中applicationContext-transaction.xml的简单配置