Perl 数组与列表

2023-12-14

我在 Perl 中有两个数据结构:

数组:

my @array2 = ( "1", "2", "3");

for $elem (@array2) {
    print $elem."\n";
}

给我以下输出:

1
2
3

还有一个清单:

my @array = [ "1", "2", "3"];                                            

for $elem (@array) {
    print $elem."\n";
}

给出以下输出:

ARRAY(0x9c90818)

显然,我想迭代这两种情况下的元素,但为什么第二个解决方案只给我这个数组的引用?


Perl 中的列表不是数据结构,它们是源代码中的位置,由它们周围的上下文决定。列表基本上是 Perl 用于移动数据的瞬态结构。您可以使用 Perl 的所有语法与它们交互,但不能将它们作为数据类型使用。最接近列表的数据类型是数组。

my @var    =    (1, 2, 3);  # parens needed for precedence, they do not create a list
   ^ an array    ^ a list

say 1, 2, 3;
    ^ a list

say @var;
    ^ a list (of one array, which will expand into 3 values before `say` is called)

当你写的时候[1, 2, 3]您正在做的是创建标量数组引用。该数组引用是用列表初始化的1, 2, 3,它与创建命名数组并引用它相同:

[1, 2, 3]   ~~   do {my @x = (1, 2, 3); \@x}

自从[...]构造创建一个标量,您应该将其保存在标量中:

my $array = [1, 2, 3];                                            

for my $elem (@$array) {   # lexical loop variable
    print $elem."\n";
}

由于您想要对整个数组进行操作,而不仅仅是引用,因此您可以放置​​一个@在......面前$array它取消引用存储的数组引用。

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

Perl 数组与列表 的相关文章

随机推荐

  • 检查范围内的数据类型

    我正在尝试使用 VBA 函数验证用户选择的范围内所有单元格的数据类型是否相同 我有以下代码 简化 它在大多数情况下都有效 Dim vTempRange As Variant Dim vCell As Variant vTempRange D
  • 解析标记范围和未标记范围中的组件

    我尝试为 AutoFac 中的一些标记生命周期提供不同的服务 但似乎无法掌握它 我尝试过使用自定义生命周期每个匹配生命周期范围的实例 默认情况下 但这没有用 我编写了一个测试来说明我正在尝试做的事情 TestMethod public vo
  • 调整画布大小 - 保持最大宽度或高度,无需拉伸/填充

    我有一个关于在 javascript 中使用 canvas 的 html5 游戏的问题 我希望向玩家显示的画布包含 1920 的 canvas width 或 1080 的 canvas height 以便看不到填充 这意味着如果玩家使用其
  • 两个单选按钮同时选择

    我正在添加一个单选按钮divjsp页面的 但是新添加的单选按钮始终处于选择状态 当我单击第二个单选按钮时 它也会选择 有没有脚本可以写这个 div style padding left 15px div Entry Mode Code wa
  • 获取私人 bitbucket 存储库,给出 403 禁止

    执行时go get bitbucket org 我收到这个错误 yash jain projectname go get bitbucket org go bitbucket org https api bitbucket org 2 0
  • UICollectionView 收到索引路径不存在的单元格的布局属性

    我使用 UICollection 视图来显示网格布局中的项目 对于数据源 我使用 5 5 维数组 我还为节中的 numberOfItems 返回 5 为 numberOfSections 返回 5 然后我的应用程序也因以下错误而崩溃 UIC
  • 使用 C# 是否可以测试文件是否持有锁

    背景 我使用文件偏移量和文件流锁定 解锁方法来控制读 写访问 我正在使用以下代码来测试文件当前是否持有锁 try fs Lock RESERVED BYTE 1 fs Unlock RESERVED BYTE 1 rc 1 catch rc
  • 在 VBA 中使用 InStr 进行多字符串搜索

    我正在检查名称文本框是否以 Mr Mrs Ms 等开头 我创建了一个函数 但无法比较多个字符串 这是我的代码 Checking whether name is starts with Mr Mrs Ms Dr or not If Not F
  • 用外行人的话来说,什么是 Unobtrusive Javascript? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 用外行人的话来说 什么是 Unobtrusive Javascript 举一个例子可以很好地帮助我理解 查看维基百科文章 不引人注目的 JavaScript Unobtrusiv
  • git merge:删除我想保留的文件!

    如何在 git 中合并两个分支 同时保留必要的来自分支的文件 合并两个分支时 如果一个文件在一个分支中被删除 而在另一个分支中没有被删除 则该文件最终将被删除 例如 当您创建新分支时 master 中存在一个文件 您从 master 中删除
  • 创建较大集合的固定长度非重复排列

    我知道这个话题被广泛讨论 但我似乎找不到任何适合我需求的实现 我有以下字符集 abcdefgh 我想获得所有可能的排列或组合 不重复 但在有限 可变 字符集上 意思是如果我输入字符和数字2 结果应该是这样的 ab ba ac ca ad d
  • 将原始输入变量除以数字时出现 Python TypeError

    我想将输入的磅重量转换为千克 但出现以下错误 类型错误 不支持的操作数类型 unicode 和 float My code lbweight raw input Current Weight lb kgweight lbweight 2 2
  • 挂载前判断网络共享是否存在

    我正在开发一种工具 可以根据用户连接的无线网络自动安装网络卷 安装卷很简单 NSURL volumeURL The URL to the network volume Attempt to mount the volume FSVolume
  • Springboot异常处理程序没有捕获异常

    在 Spring Boot 和 Rest 应用程序中 我配置了一个异常处理程序 如下所示 如果在请求使其停止服务后抛出异常 它可以正常工作 Rest api 需要 application json 的内容类型 如果我不将该内容类型标头发送到
  • 用 Java 处理条形码扫描

    我想让我的应用程序对扫描的条形码做出反应以触发按钮按下 例如 用户可以扫描 打印 条形码来激活打印按钮 条形码将被视为用户输入了一些文本 我不确定扫描仪是否会被设置为在末尾附加一个输入或一个选项卡或什么都没有 所以我不想在此基础上做出假设
  • 将等高线添加到 3D 绘图

    我正在使用 R 编程语言 我使用 plotly 库制作了以下 3 维图 library dplyr library plotly my function lt function x y final value 1 x 2 100 y x 2
  • 如何获取 foreach 循环当前迭代的索引?

    在 C 中是否有一些我没有遇到过的罕见语言构造 比如我最近学到的一些 一些在 Stack Overflow 上 来获取表示 foreach 循环当前迭代的值 例如 我目前根据情况做这样的事情 int i 0 foreach Object o
  • Threejs Blender 导出器导出格式错误

    我正在尝试在提供的帮助下将搅拌机模型导出到 Threejs json搅拌机出口商 解析 json 文件时出现错误 Uncaught TypeError Cannot read property length of undefined jso
  • 运行 plm 固定效应模型并添加因子虚拟变量(树方式固定效应)是否可以?

    运行 plm 固定效应模型并在 R 中添加因子虚拟变量 如下所示 是否可以 时间 公司 和 国家 这三个因素都是独立的指数 我想将它们一起修复 我发现下面的规范更适合我的情况 而不是通过组合 公司 和 国家 地区 来总共创建两个索引 这是可
  • Perl 数组与列表

    我在 Perl 中有两个数据结构 数组 my array2 1 2 3 for elem array2 print elem n 给我以下输出 1 2 3 还有一个清单 my array 1 2 3 for elem array print