为什么 map() 会掩盖“未定义值”错误?

2024-04-14

我想知道为什么要打电话给map第二个片段中的“未定义值”错误消失了吗?

use strict;
use warnings;
my $x;
my @a = @{ $x }; # error: Can't use an undefined value as an ARRAY reference

相比于:

use strict;
use warnings;
my $x;
my @a = map $_, @{ $x }; # no error, @a is empty

这是由于这样的方式map() http://perldoc.perl.org/functions/map.html做别名(它本质上是使用for()环形)。发生的情况是 aref 正在左值上下文中使用,因此正在被自动生动化 https://www.effectiveperlprogramming.com/2011/04/understand-autovivification/存在。

在前面的示例中,您尝试直接在右值上下文中使用 aref,这就是它生成错误的原因(因为没有发生自动激活)。

您可以简化您的测试以使用for(),你会得到与以下相同的结果map():

use warnings;
use strict;

my $x;

for (@{ $x }){
    print "$_\n";
}

...没有输出。

直观地看到$x被自动激活为数组引用,您可以使用ref() http://perldoc.perl.org/functions/ref.html功能:

my $x;
my @a = map $_, @{ $x };

print ref $x;

Output:

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

为什么 map() 会掩盖“未定义值”错误? 的相关文章

随机推荐

  • 如何在 AWS API 调用中使用“NextToken”

    我遇到了一个小问题 我真的很难理解它是如何工作的 我正在编写一个工具 它基本上执行描述组织来收集我们的 AWS 组织中的所有帐户 根据文档here https boto3 readthedocs io en latest reference
  • 解决IContainer

    从应用程序的类内部获取 Autofac 容器的建议方法是什么 Autofac 是否提供解析类上的 IContainer 属性 或者在构建容器后是否需要全局存储该容器 你需要IComponentContext or ILifetimeScop
  • OpenCV 从相机捕获 YUYV,无需 RGB 转换

    我尝试使用 openCV c 从 LI USB30 V024 立体相机捕获左右图像 而不自动将其转换为 RGB 相机输出 YUYV 格式的图像 我尝试使用 videoCapture set CV CAP PROP CONVERT RGB f
  • 带有 *ngIf 内部的模板,更改模型后不起作用

    Problem Angular 2 2版本之后 我注意到我的应用程序的某些组件存在问题 即更新数据后 视图中的数据错误 它显示了正确大小的列表 但仅包含第一项的数据 示范 我创建这个 Plunker 有一个简单的例子 http plnkr
  • Chrome 屏幕截图仅在首先单击扩展程序时有效

    因此 我尝试编写一些代码 以便在按下我的网站上的按钮时可以截取页面的屏幕截图 代码可以工作 但唯一的问题是我必须先单击 chrome 扩展 然后才能单击按钮来截取屏幕截图 我猜这是因为活动选项卡未被调用 有任何想法吗 这是错误消息 运行 t
  • C# 如何将整型的项隐式转换为 double 的项?

    是否有任何 C 规范说明如何隐式转换整型类型的项 例如 int 的条款double应该可以工作吗 如果是这样 有人可以告诉我算法或指导我吗 C 6 0 规范草案 https learn microsoft com en us dotnet
  • 你能在 C 中#define 注释吗?

    我正在尝试做一个调试系统 但它似乎不起作用 我想要完成的是这样的 ifndef DEBUG define printd else define printd printf endif 有没有办法做到这一点 我有很多调试消息 但我不喜欢这样做
  • 编写一个简单的自定义编辑器需要多快?

    简单地说 我的意思是有按钮 bold italic 编号列表 要点列表 向左缩进 右缩进 拼写检查 显然由现成的 js 组件支持 我所说的自定义是指 拥有自定义图标 所以实际上只是自定义设计 无框架 从头开始编写 轻量级 兼容主流浏览器 这
  • ViewChild 与输入/输出 - Angular 最佳实践 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我看来 几乎在所有我们指定组件的情况下 Inputs Output我们也可以没有任何 Inputs Outputs 而是使用 ViewChil
  • PySpark 将列除以其总和[重复]

    这个问题在这里已经有答案了 我试图将 PySpark 中的列除以它们各自的总和 我的数据框 此处仅使用一列 如下所示 event rates 1 10 461016949152542 2 10 38953488372093 3 10 609
  • heroku 应用程序在推送后仍然引用旧文件

    我最近在 Heroku 中遇到了这个非常奇怪的问题 我在本地开发和测试 然后将更改推送到 Heroku 尽管推送的文件已经更改 Heroku 确实识别了它并推送了新文件 但当我查看 Heroku 上的确切网页时 它的行为就好像它仍在使用我刚
  • 在 Xamarin iOS 中使用 Firebase Crashlytics

    任何人都可以帮助我如何使用适用于 Xamarin iOS 的 Xamarin Firebase iOS Crashlytics nuget 包 我的代码中随机出现 SIGSEGV 代码错误 但我无法找出实际问题 已经搜索了很多关于如何在 X
  • 如何在java swing中为某个类型的所有组件设置UI?

    我创建了自己的MyScrollbarUI类在我的应用程序中具有自定义滚动条外观 现在我必须做 scrollPane getHorizontalScrollBar setUI new MyScrollbarUI scrollPane getV
  • 用于渲染大量数据的表格设计 Angular

    我是角度新手 期待创建一个将呈现大量数据的表 下面是我试图实现的表中的功能 有人可以指导如何解决这个问题吗 有没有实现它的开源项目 或者好的资源 通用搜索按钮可在所有列中搜索并在表格中显示结果 用户可以显示和隐藏某些列 选定列上的预填充过滤
  • 仅 CSS 视差滚动停止在 IOS/IPadOS 13 上工作?

    好吧 我在网络开发领域还是个新手 几个月前 我仅使用 CSS 视差滚动完成了自己的网站 iOS13 出现了一些问题 对于视差效果 我使用了描述基思 克拉克 https keithclark co uk articles pure css p
  • 拖动 Vuetify v-data-table 中的列

    我想在 v data table 中通过标题拖动列 我已经使用指令 sortablejs 取得了很大的进展 但我无法弄清楚以下内容 我不确定当 列数与 列数不匹配时如何解释 使用 colspan someNumber 时可能会发生这种情况
  • 如何从 youtube-dl --write-auto-sub 下载转换混乱的 .vtt 子文件?

    我的目标是在单独的文件中下载带有自动生成字幕的 YouTube 视频 例如 vtt srt etc 我目前正在努力实现这一目标youtube dl但如果需要的话 我愿意接受其他解决方案 当我运行以下命令时 它将视频下载为 mp4 这很好 和
  • 没有父母的反复无常的修订意味着什么?

    我有一个 Mercurial 存储库 现在处于奇怪的状态 这就是 TortoiseHG 中的样子 我认为这是不可能的 修订版 54 的父级为 1 000000000000 即无 显然 我对 Mercurial 还有些不明白 任何人都可以让我
  • 在 Dart 中将类型化函数作为参数传递

    我知道Function https api dartlang org stable 1 22 1 dart core Function class html类可以作为参数传递给另一个函数 如下所示 void doSomething Func
  • 为什么 map() 会掩盖“未定义值”错误?

    我想知道为什么要打电话给map第二个片段中的 未定义值 错误消失了吗 use strict use warnings my x my a x error Can t use an undefined value as an ARRAY re