如何在 perl 中创建多维数组?

2024-03-09

我这样创建一个多维数组:

#!/usr/bin/perl
use warnings;
use strict;

my @a1 = (1, 2);
my @a2 = (@a1, 3);

但事实证明我仍然得到一个一维数组......

Perl 中正确的方法是什么?


你得到一个一维数组,因为数组@a1在括号内展开。所以,假设:

my @a1 = (1, 2);
my @a2 = (@a1, 3);

那么你的第二条语句相当于my @a2 = (1,2,3);.

创建多维数组时,您有几种选择:

  1. 直接赋值每个值
  2. 取消引用现有数组
  3. 插入参考

第一个选项基本上是$array[0][0] = 1;并且不是很令人兴奋。

第二个是这样做的:my @a2 = (\@a1, 3);。请注意,这会引用数组的名称空间@a1,所以如果你以后改变@a1,里面的值@a2也会改变。它并不总是推荐的选项。

第二个选项的变体是这样做的:my @a2 = ([1,2], 3);。中括号会创建一个匿名数组,该数组没有命名空间,只有内存地址,并且只会存在于内部@a2.

第三个选项有点晦涩难懂,是这样做的:my $a1 = [1,2]; my @a2 = ($a1, 3);。它会做与 2 完全相同的事情,只是数组引用已经在一个标量变量中,称为$a1.

注意之间的区别() and []分配给数组时。括号[]创建一个匿名数组,它返回一个数组引用作为标量值(例如,可以由$a1, or $a2[0]).

另一方面,括号除了改变运算符的优先级之外,实际上什么也不做。

考虑这段代码:

my @a2 = 1, 2, 3;
print "@a2";

这将打印1。如果你use warnings,您还会收到警告,例如:Useless use of a constant in void context。基本上,会发生这种情况:

my @a2 = 1;
2, 3;

因为逗号 (,) 的优先级低于等号=。 (参见“运算符优先级和结合性”佩尔多克·佩洛普 http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity.)

括号只是否定默认优先级= and ,,和组1,2,3一起放在一个列表中,然后传递给@a2.

所以,简而言之,括号里,[],它们有一些魔力:它们创建匿名数组。括号,(),只需更改优先级,就像数学中一样。

文档中有很多内容需要阅读。这里有人曾经向我展示过一个非常好的取消引用链接,但我不记得它是什么了。在佩尔多克·佩尔雷夫特 http://perldoc.perl.org/perlreftut.html您将找到有关参考资料的基本教程。并且在perldoc perldsc http://perldoc.perl.org/perldsc.html您将找到有关数据结构的文档(谢谢奥索尔提醒我 https://stackoverflow.com/questions/6425893/how-can-i-create-a-multi-dimensional-array-in-perl/6425961#6425961).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 perl 中创建多维数组? 的相关文章

随机推荐

  • Chrome 和 Firefox 中的 WebSocket 在不活动一分钟后断开连接

    我发现 Chrome 和 Firefox 中的 WebSocket 在闲置一分钟后就会断开连接 根据我在网上看到的内容 我完全将责任归咎于代理或某些服务器设置或其他东西 但在 IE 或 Edge 中不会发生这种情况 看起来如果套接字在一分钟
  • 在数据库中存储长字符串好吗?

    我需要在数据库中存储长字符串 该字符串可能有 5 或 6 个句子长 您认为这是一个很好的设计策略吗 或者我应该存储该字符串的 id 然后创建与另一个包含存储该字符串的文件位置的表的关系 您能给出两者的优点和缺点吗 字符串已被预处理并存储在数
  • 具有命令行历史记录和制表符补全功能的 mit-scheme REPL

    我正在阅读SICP http mitpress mit edu sicp full text book book html我正在使用mit scheme http www gnu org software mit scheme 通过以下方式
  • WebAPI传递的post参数为null

    我正在使用 WebAPI 2 进行测试 并且创建了以下控制器方法 POST api values public string Post FromBody string value string returnValue Return valu
  • 基本的多对多左连接查询

    所以我有3张表 users 成就 Achievements unlocked 多对多 我想要一个查询返回所有可用的成就 并提及当前用户 例如 id user 123 已解锁的成就 我怎样才能做到这一点 这应该涉及左连接 但如果我添加 WHE
  • AngularJS 文件夹结构 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何为大型且可扩展的 AngularJS 应用程序布局文件夹结构 按类型排序 左侧是按类型组织的应用程序 对于较小的应用程序来说还不错 但即使在
  • 无法在关闭时从模态中删除数据。每次都显示相同的内容

    无法在关闭时从模态中删除数据 每次都显示相同的内容 body on hidden bs modal modal function this removeData bs modal 这个功能也不起作用 当我将数据传递到相同的模式并删除内容时
  • 十六进制颜色如何工作?

    代表CSS颜色的十六进制是什么意思 在不记住确切代码的情况下如何知道它是什么颜色 它与RGB 和CMYK 系统有什么关系吗 我想了一下FF means 255RGB 但后来我意识到 15 2 不是 255 而是 225 十六进制使用十六个不
  • 捆绑包格式无法识别、无效或不合适

    代码 8 1 语言 Objective C 我可以在 iPhone 上运行该项目 但无法在模拟器上运行 I tried 1 删除DerivedData文件夹的所有数据 2 清理项目并重新启动项目 3 删除资源文件夹 但这没有用 对于那些无法
  • PHP 中的正则表达式重复捕获组

    我正在尝试从一个带有路线的文件中获取信息 因此对于这项工作 我选择了正则表达式 但我遇到了重复信息的问题 为了做一个更好的问题 我将把我拥有的内容和我想要的内容放在一起 所以我有一个文件 Codes C Connected S Static
  • 如何在 scala 中按 Ordered 参数化 Int

    我有一个具有参数化类型的类 我想对其进行比较运算符 我认为我需要使用 Ordered 特征来实现这一点 但编译器不喜欢我使用它 假设我有以下课程 class Test T lt Ordered T def someOp t T if t l
  • 仅当在构建服务器上运行时单元测试才会失败

    为了帮助单元测试 我们已经完成了DateTime委托中的类 以便DateTime Now可以在单元测试中被覆盖 public static class SystemTime region Static Fields public stati
  • 如何检测我的 Android 应用程序中的广告拦截器?

    有什么方法可以检测广告拦截器何时在应用程序中运行 我想在我的应用程序中检测用户是否使用任何应用程序来阻止应用程序中的广告 如果是 那么我想向用户显示弹出窗口 要求他在使用应用程序时禁用广告拦截器 Android 操作系统没有提供官方方法来以
  • Typescript/babel 导入导致“_1.default 不是函数”

    我正在尝试使用https github com timmywil panzoom https github com timmywil panzoom来自使用 webpack 和 babel 编译的 typescript 项目 问题是打字稿方
  • 自定义树视图

    有没有办法自定义 winform 树视图以获得类似的东西 目的是通过父项目使用一种颜色并定义一个三角形而不是 图标来开发项目 Use TreeViewDrawMode OwnerDrawText所以缩进将由TreeView 除此之外 你应该
  • ::ng-deep 将被弃用 - 有其他选择吗?

    医生说 阴影穿透后代组合器已被弃用 并且主要浏览器和工具正在删除支持 因此 我们计划放弃对 Angular 的支持 对于 deep gt gt gt 和 ng deep 的所有 3 个 在那之前 应该首选 ng deep 以获得与工具更广泛
  • 在 JBoss 上部署 Hibernate 应用程序时出错 - 找不到适用于 jdbc 的驱动程序

    我有一个 Spring Hibernate Web 应用程序 目前在 Tomcat 上运行良好 我正尝试将其部署到 JBoss 7 1 AS 应用程序全部正确启动 但如果我设置 Hibernate Persistence 设置来创建表 则会
  • 如何使用冒号解组 XML 属性?

    我正在使用的一些 SVG XML 文件的属性名称中包含破折号和冒号 例如
  • 如何使用 jasmine 测试 $window.open

    这是我的功能 scope buildForm function majorObjectId name window open FormBuilder Index scope currentAppId form majorObjectId n
  • 如何在 perl 中创建多维数组?

    我这样创建一个多维数组 usr bin perl use warnings use strict my a1 1 2 my a2 a1 3 但事实证明我仍然得到一个一维数组 Perl 中正确的方法是什么 你得到一个一维数组 因为数组 a1在