带范围运算符的 Perl 上下文是什么?

2024-01-08

我是 Perl 新手。我想结合范围运算符来理解 Perl 上下文。这是我的代码。

use strict;
use warnings;

my $asc = ( 10 .. 50 );
print "$asc\n";

我有两个疑问。

  1. 如果表达式 ( 10 .. 50 ) 返回一个数组,那么,由于它是标量上下文,因此应为“asc”变量分配数组的长度,即 41。

  2. 如果表达式 ( 10 ..50 ) 返回一个列表,则由于它是标量上下文,因此应将“asc”变量分配给列表中的最后一项,即 50。

但是,我听到以下喊声..

Use of uninitialized value in range (or flip) at main.pl line ..

感谢并欢迎任何指导。


您正在与范围运算符.. http://perldoc.perl.org/perlop.html#Range-Operators在标量上下文中,也称为触发器运算符。

您应该阅读整个文档,但以下摘录与您的情况相关:

在标量环境中,“.." 返回一个布尔值。该运算符是双稳态的,就像拖鞋,并模拟 sed、awk 和各种编辑器的行范围(逗号)运算符。

...

如果标量 " 的任一操作数.." 是一个常量表达式,如果该操作数等于 (==)到当前输入行号($.多变的)。

“确切的”错误消息解释了发生的情况:

Use of uninitialized value $. in range (or flip)

基本上,Perl 将这种用法解释为触发器测试。

它正在测试当前行号是否$.等于您指定的整数值:

my $asc = ( $. == 10 .. $. == 50 );

但是,由于您尚未读取文件句柄,因此$.变量未初始化并引发警告。

实现列表上下文

可以获得您所描述的列表上下文行为,但您需要调整代码以使您的意图更加明确:

my $count = () = (10..50);          # Forces a list context
my $last_element = (10..50)[-1];    # Also forces a list context

print "$count\n";
print "$last_element\n";

Outputs:

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

带范围运算符的 Perl 上下文是什么? 的相关文章

随机推荐

  • Ember.JS 中的动态计算属性已弃用?

    我正在尝试制作一个 ember 应用程序 我有一个计算属性 控制器如下所示 The Controller Todos Controller Ember Controller create SNIP countCompleted functi
  • “eval() uating”条件的替代方法

    在我正在处理的遗留代码库中 有一个条件评估器 它接受用户输入来构建条件 然后使用 php eval 在运行时评估此条件 在不使用 eval 的情况下解决此问题的最佳方法是什么 例如我有一个用户在 UI 中输入的条件 1 gt 0 必须对此进
  • 使用 VBA 从 Excel 工作表更新 SQL

    我正在尝试使用 VBA 从 Excel 工作表更新 SQL 中的一些记录 我在 Excel 工作表中有很多记录 所以这就是为什么我想自动化这一点 以下是我要更新 rmn dr 的字段示例 t id 在两个表中都是唯一的 我想使用 Excel
  • ADB 没有响应 - Android Studio

    不要将其标记为重复项 让我解释一下出了什么问题并告诉你我做了什么 所以这是我的问题 当我打开 Android Studio 时 它给我一个错误 如下所示 然后我进入我的 Windows 防火墙设置 这是我所拥有的 如您所见 防火墙已关闭 然
  • 工作节点组未加入 EKS 集群

    我按照这个博客在 AWS 上设置了 open5GS https aws amazon com blogs opensource open source mobile core network implementation on amazon
  • 为什么 simplexml_load_file 相对于主机文件不起作用?

    I have simplexml load file指令放置在包含的 PHP 文件中 但该指令的工作原理取决于我包含此文件的位置 为什么 是否可以相对于放置的文件指令解释相对文件路径 您始终可以使用魔法访问当前文件的完整路径 FILE ht
  • partial_fit Sklearn 的 MLPClassifier

    我一直在尝试使用Sklearn的神经网络MLPClassifier 我有一个大小为 1000 个实例的数据集 具有二进制输出 我想对其应用带有 1 个隐藏层的基本神经网络 问题是我的数据实例并非同时可用 在任何时间点 我只能访问 1 个数据
  • Erlang 进程与 Java 线程

    我在读Sa a Juri 所著的 Elixir in Action 一书 第一章 https manning content s3 amazonaws com download b b915834 e80b 4520 939d ff1900
  • Delphi 中的嵌套属性

    Delphi 有没有办法使用嵌套属性 目前我正在使用Delphi XE 例如 TCompoundAttribute class TCustomAttribute public constructor Create A1 A2 TCustom
  • 有没有办法在函数运行完成后运行其他函数?

    def foo pass def bar print good bay 两个功能如打击 现在我想在 foo run 完成后运行 bar 函数 有没有类似类使用的方法 del 据我所知 在课堂方法中我可以使用 del 就像下面这样 class
  • 在表中存储/检索数组的最佳方法

    我目前在 MySQL 中有一个表可以正常存储值 但我想向该表添加一个字段来存储值数组 例如城市 我应该简单地将该数组存储为 CSV 吗 每行都需要它自己的数组 因此我对创建一个新表并为前一个表中插入的每行插入 2 5 行感到不安 我觉得这种
  • 如何在 JavaFX TableView 中的行悬停时发生某些事情?

    现在 当在表格视图中选择一行时 我会在鼠标位置显示对话框 我希望当我将鼠标悬停在每一行上时显示对话框 似乎有一个 CSS hover 所以我认为它可以以某种方式在 java 代码中捕获 您可以创建一个自定义表行工厂 它将侦听器添加到行的悬停
  • 为什么我不能在 std::vector 中使用抽象类?

    我是从这些问题中得出的 为什么我们不能声明 std vector https stackoverflow com questions 2160920 why cant we declare a stdvectorabstractclass
  • 将 $mysqli 设置为 OOP 的全局变量

    好的 这是一个复杂的问题 但任何帮助或建议将非常感激 所以我正在与一个网站合作 使用 htaccess 将所有流量重定向到load php 对于任何sql功能 我有一个抽象类 它有很多查询语句作为传递参数来定义每个查询的细节的函数 例如 t
  • 如何防止 Netlify 因为 process.env.CI = true 将警告视为错误?

    在 Netlify 上部署新项目开始失败 检查日志 我看到以前成功部署的日志中没有的内容 Treating warnings as errors because process env CI true Most CI servers set
  • 以编程方式安排 AWS Lambda 一次性执行

    我有两个 AWS Lambda 函数 我希望 Lambda A 确定某个时间点 例如 2022 年 5 月 4 日 10 00 然后我希望 Lambda B 被安排在这个特定的时间点运行 我可能可以通过使用 Lambda A 以编程方式创建
  • 在 Shiny 应用程序中使用 Font Awesome 5.7 图标

    Shiny s icon 功能仅支持 Font Awesome 4 7 图标 可以在此处找到 Shiny 支持的图标的完整列表 https fontawesome com v4 7 0 icons 自那以后 Font Awesome 已多次
  • 如何为 Windows 安装程序创建清单?

    我们的应用程序有一个安装程序 必须像许多其他安装程序一样以管理员权限下载和运行 但是 安装程序未命名为 setup exe 因此 Windows 不会自动检测到它需要提升才能运行 坦率地说 更改安装程序名称以使事情正确提升听起来相当混乱 本
  • 如何在 PHPStorm (WebStorm) 中调试 grunt

    有人对在 PHP Storm 中调试 grunt 例如事件侦听器函数 有个好主意 Storm 中有 Node js 支持 但如果我想调试 grunt 任务 例如当文件更改并且监视任务发出它时 我不确定如何配置调试设置 我使用Windows
  • 带范围运算符的 Perl 上下文是什么?

    我是 Perl 新手 我想结合范围运算符来理解 Perl 上下文 这是我的代码 use strict use warnings my asc 10 50 print asc n 我有两个疑问 如果表达式 10 50 返回一个数组 那么 由于