在“for (keys %hash) {}”循环中更改键

2023-12-15

我记得关于不更改密钥的事情

for my $key ( keys %hash ) { ...

例如

for my $key ( keys %hash ) {
    $key = "$key_x";
}

但是删除键并更改值就可以了。 我的记忆还好吗?


我想你记住的是这样一个事实:如果你这样做

for my $item (@array) {
    ...
}

然后在中间添加或删除项目@array(例如通过使用splice) 是不允许的,如果您尝试这样做,结果是未定义的。事实上,在过去,你实际上可以通过这种方式使 Perl 崩溃。

由于列表返回keys是一个副本,它完全在循环开始时确定,并且从哈希中添加和删除键根本不会影响循环。这意味着你可以做类似的事情

for my $key (keys %hash) {
    $hash{lc $key} = delete $hash{$key};
}

100%安全无忧。我可以保证这在 perl 5.6.1(2001 年 4 月)中是正确的,当时在 perlfunc 中添加了“返回值是副本”的注释,但似乎从那时起就一直如此,而且变化只是到文档。

Since $key循环中的值被别名为临时列表中的值,您可以更改它而不会发生任何不良情况,但它不会对%hash at all.

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

在“for (keys %hash) {}”循环中更改键 的相关文章

  • perlbrew 可以在 Windows 上运行吗?

    使用 ActiveState 5 8 8Windows XP http en wikipedia org wiki Windows XP 我想安装更新的 Perl 进行测试 迁移 有一天 我们将不再以为自己只能使用一台计算机 当我想测试这类
  • 为什么 foreach 这么慢?

    PHPBench com http www phpbench com 在每个页面加载上运行快速基准测试脚本 在 foreach 测试中 当我加载它时 foreach 的运行时间是第三个示例的 4 到 10 倍 为什么本机语言构造明显比执行逻
  • 使用 foreach 进行复杂的多维关联数组处理

    我不得不再次问这个问题 抱歉 但我在尝试处理这个数组时遇到了问题 我尝试了几种不同的方法 但没有一个是正确的 这是数组 Array search gt Array response gt Array errors gt number of
  • 如何从 Perl 中的 Subversion 预提交挂钩访问提交的文件?

    我需要执行以下操作 用 Perl 编写预提交钩子 Hook 应检查所有提交的文件是否存在某些文本 如果未找到该文本则失败 基本上 我需要一个读取正在提交的文件的 Perl 钩子示例 我真的在寻找一些代码量最少的优雅解决方案 笔记 钩子应该使
  • 标量值错误(使用 IO::Socket)

    这是我当前的代码 usr bin perl w use strict require IO Socket while lt gt chomp my host my header print Connecting to host n my s
  • 多维哈希排序 - Perl [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我真的需要一些帮助来理解这个哈希并对
  • 为什么Perl的SUPER调用不使用箭头方法?

    我注意到 当您调用超类的方法时 您需要执行以下操作 my self class gt SUPER new 为什么不是这样 my self class gt SUPER gt new 我怀疑是因为 class gt SUPER gt new
  • 如何检测已更改的网页?

    在我的应用程序中 我使用 LWP 定期获取网页 无论如何 是否要检查两次连续提取之间网页是否在某些方面发生了变化 除了明确进行比较之外 是否有在较低协议层生成的任何签名 例如 CRC 可以提取并与旧签名进行比较以查看可能的更改 有两种可能的
  • 为什么我不能执行 foreach (var Item in DataTable.Rows)?

    我无法执行以下操作是否有原因 foreach var Item in DataTable Rows 而不是必须做 foreach DataRow Item in DataTable Rows 我本以为这是可能的 就像其他数据类型一样 例如
  • SmartGIT 不要求 ssh 密钥

    切换到新计算机后 我必须再次安装 Windows 版 SmartGIT 现在尝试克隆我的 fedorahosted org repository 密钥存储在 C User myusername ssh SmartGIT 附带了全新安装 并且
  • PHP 如果没有已知索引,如何访问多维数组的所有元素?

    我在这里使用了代码的修改版本确定 PHP 类文件中定义了哪些类 https stackoverflow com questions 928928 determining what classes are defined in a php c
  • 在这个使用泛型的初学者 java 示例程序中,“:”在做什么?

    好吧 我需要帮助理解一些事情 我理解 是如何一起使用的 但是阅读一些 Java 入门资料后 我发现这种情况在一些地方出现 最近的是这个 public static u void fillBoxes U u List u
  • 为什么子程序需要在声明其中使用的变量之后编写?

    假设我们有这段代码 为什么它会因显式包名称错误而失败 因为该函数仅在声明后才被调用 value use strict use warnings sub print value print n value my value 2 print v
  • foreach如何知道迭代集合被修改了?

    当我修改集合时 我正在迭代foreach 我有一个例外 所以我只是好奇如何foreach 或运行时 检测到这一点 对于一般对象可以这样做吗 集合本身必须检测它 在标准库集合中 这是通过拥有一个内部版本号来实现的 该版本号由每个操作修改 并由
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron
  • 使用 Perl 获取 值

    因此 我有一个报告工具 可以在 HTML 文件中输出作业调度统计信息 并且我希望使用 Perl 来使用这些数据 但我不知道如何单步浏览 HTML 表 我知道如何使用 jQuery 来做到这一点 find tr each function v
  • perl-5.10 之前的高效版本相当于 pack("Q>")

    更新 萨尔瓦正确地指出我对 Q 包模板的介绍是错误的 这是 gt 修饰符 不会返回到 5 8 Perl 5 10 引入了 pack 修饰符 gt 对于我使用 Q 的用例 它将一个无符号四边形 64 位 值打包在大尾数法 现在 我正在寻找一个
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li

随机推荐

  • 在 d3.js 中嵌入 json 文件

    http bl ocks org mbostock 4339083我正在使用这个 代替d3 json d 4063550 flare json function error flare 我如何让它使用 html 中的 json 文件 就像我
  • 如何将 ZipInputStream 转换为 InputStream?

    我有代码 其中 ZipInputSream 转换为 byte 但我不知道如何将其转换为输入流 private void convertStream String encoding ZipInputStream in throws IOExc
  • 如何在 Swift 中的两个场景之间传递数据?

    我有两个场景 我想使用转场将单个变量传递到另一个场景 我已经尝试过 但不幸的是我见过的所有教程都涉及故事板 我没有使用故事板 我正在以编程方式完成所有这些工作 这是我试图初始化的segue func prepareForSegue segu
  • 刷新 recyclerview 片段中的项目

    我的应用程序有 4 个带有滑动选项卡布局的选项卡 我在 MainActivity 中使用了一个视图寻呼机 每个选项卡都有 4 个片段 我使用 volley 从 mysql 接收数据 卡片视图 回收者视图和 JSON 我想使用 SwipeRe
  • 与 MATLAB SQL Server 进行通信

    有没有办法有效地沟通这些平台 我是说 像导出 SQL Server 和加载 Matlab 之类的东西 但以有效的方式 我找到了adodb 工具到目前为止 文件交换工作得最好 它比数据库工具箱或任何先前的包装解决方案要快得多 不需要额外的工具
  • 在 OpenCV 中使用 FeatureDetector 会导致访问冲突

    我需要找到并匹配立体图像中的特征点 因此我想比较 OpenCV 2 4 5 支持的不同特征检测算法 通过将 SURF SIFT 等传递给函数 代码片段 include opencv2 opencv hpp include
  • 绘制鼠标指针图标?

    我正在编写一些有趣的小工具 我希望能够在与原始鼠标不同的位置绘制第二个 或更多 鼠标指针图标 但根据原始鼠标的移动来移动它 我知道如何跟踪鼠标的移动 但我不知道如何绘制 重绘鼠标指针 有人可以帮忙吗 您可以使用以下代码 CURSORINFO
  • 如果 f:viewParam / converter 返回 null,如何将用户发送到 404 页面?

    假设您有一个带有视图参数的页面 例如 widgets widgetId 1
  • 这段代码能确保我从套接字读取我想要的所有内容吗?

    执行 Socket Receive byte 将从缓冲区中获取字节 但如果预期的数据相当大 则所有字节可能尚未在缓冲区中 这将给我一个仅部分填充的字节数组 这段代码能确保我读入我想要的所有内容吗 sock Receive message b
  • RDD 谱系何时创建?如何找到谱系图?

    我正在学习 Apache Spark 并尝试获取 RDD 的谱系图 但我找不到特定谱系何时创建 另外 哪里可以找到 RDD 的谱系 RDD谱系是每次应用转换时创建和扩展的分布式计算的逻辑执行计划any RDD 请注意执行操作后发生的 逻辑
  • 如何导入同目录或子目录中的类?

    我有一个目录 其中存储了所有 py files bin main py user py where class User resides dir py where class Dir resides 我想使用来自的课程user py and
  • GoF Factory 的命名约定?

    该模式使用抽象工厂 然后使用工厂的实现 我确信这两个类有一个标准的命名约定 但我不知道它是什么 例如 public abstract class ChocolateFactory public class MyChocolateFactor
  • 自动退出SurfaceView

    我正在为 Android 2 x 开发一款游戏 当玩家松手时 我想自动退出并返回到游戏的上一个菜单 这可能是一个简单的问题 但我该怎么做呢 我有一个 MenuActivity 它调用 GameActivity 它调用游戏逻辑所在的 Game
  • 如何使 CSS 网格中的图像彼此相邻并在空间不足时跳转到另一行

    我正在尝试使用 CSS 网格按照图片中所示的方式定位图像 但找不到正确的解决方案 现在 我只是将网格流更改为列 但是网格元素在遇到容器末尾时不会跳转到另一行 它们会调整其大小并保留在相同的第一行中 我尝试使用grid template co
  • 当编辑行中的单元格时,如何更改谷歌电子表格行颜色?

    我已经尝试过这个 当单元格更改文本时更改行颜色的脚本但它无法让它发挥作用 该行的颜色不会更改为 000000 这是我到目前为止所拥有的 function onEdit event var ss event source getActiveS
  • 使用perl的`系统`

    我想运行一些命令 例如command 使用perl的system 认为command从 shell 运行如下 command arg1 arg1 arg2 arg2 arg3 arg4 我该如何使用system to run command
  • OpenAPI 3.0 - oneOf 内的 allOf

    以下 YAML openapi 3 0 0 info title test version 1 0 0 paths test get summary test responses 200 description Test content a
  • 不允许的内容类型:Struts 2 中的 fileUpload

    我是 Struts 2 的新手 正在尝试使用fileUpload拦截器 我正在附加所有代码层 动作类 FileUploadAction package com caveofprogramming actions import java io
  • 将一张工作表的内容和样式克隆到另一张工作表 - PHP Excel

    我需要将 Excel 工作簿中一张工作表的内容复制到新 Excel 工作簿中的一张工作表 问题是 我不知道这些工作表包含什么或其格式 但是 每次都只是第一张 我尝试过一种方法 但每次都会耗尽内存 所以我想我应该逐行执行 100 000 行
  • 在“for (keys %hash) {}”循环中更改键

    我记得关于不更改密钥的事情 for my key keys hash 例如 for my key keys hash key key x 但是删除键并更改值就可以了 我的记忆还好吗 我想你记住的是这样一个事实 如果你这样做 for my i