【问题标题】:Hash merging method affected in Perl 5.18+ by hash order randomization?Perl 5.18+ 中受哈希顺序随机化影响的哈希合并方法?
【发布时间】:2013-01-06 00:19:18
【问题描述】:

根据this question 的回答,在 Perl 5 中合并两个哈希可以通过以下方式完成:

%newHash = (%hash1, %hash2); %hash1 = %newHash;

或:

@hash1{keys %hash2} = values %hash2;

另一方面,Perl 5.18 will introduce per process hash randomization

在 Perl 5.18 中使用第二种方法是否仍然正确?

【问题讨论】:

  • 顺便说一句,在第一个示例中没有必要使用%newHash。你可以说%hash1 = ( %hash1, %hash2 );
  • 是的,我也想过。我只是从链接问题的答案中复制了示例,我的主要重点是另一个示例。不过感谢您的澄清。

标签: perl hash merge


【解决方案1】:

看完Re^2: Hash order randomization is coming, are you ready?,答案是是的。和以前一样,keysvalueseach 将在同一进程中生成相同的序列,如果哈希之间没有改变的话。

【讨论】:

  • 如果它更有可能像在 5.8.1 和 5.18 之间的 perl 一样工作,那么如果 perl 检测到攻击,它很有可能会使用随机种子重新散列哈希。这将导致订单发生变化。在 5.18 中,种子在进程的生命周期内保持不变
  • @user1937198 它完全有可能工作,因为它总是(并且仍然是)保证 keysvalues 在同一个哈希上返回相应的列表,只要哈希没有被修改两次通话之间。
猜你喜欢
  • 2011-10-04
  • 2014-04-16
  • 2010-10-20
  • 1970-01-01
  • 2012-04-28
  • 2016-01-26
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多