【发布时间】:2015-12-28 21:26:48
【问题描述】:
假设我有一个返回哈希结果的子程序。我想从我的父目录中的子例程中迭代键/值对,并且不想先将结果保存到变量中。
这看起来很简单,但我完全不知道该怎么做。如果该方法返回一个哈希,我不知道告诉循环期望从该方法返回一个哈希所需的语法。如果该方法返回一个 hashref 我可以做
while( my($key,$value) = each ( %{ generate_hash() } )
但这会在每次循环完成时重新运行 generate_hash() 方法,重新生成相同的哈希,并重新处理哈希的第一个元素(或者至少在 5.10 中这样做。5.14 允许每个都采用一个标量,这可能会解决问题,不确定,但遗憾的是我仅限于 5.10。
谁能解释一下我在这里遗漏了什么明显的语法?
【问题讨论】:
-
"并且不想先将结果保存到变量中。"这确实是降低代码可读性的一个糟糕的理由。
-
我不确定您是否可以在指定的约束范围内执行此操作。要迭代哈希,您确实需要
keys或each,并且在这两种情况下,您都需要“访问”两次哈希。 (我想你可以在紧要关头一次迭代一个元素,但是你仍然需要使用 var 再次将它们粘在一起)