这听起来像是一个 XY 问题。你想通过强制将 perl 中的哈希算法降级为已知问题的算法来完成什么?
来自评论:
我需要运行大量用 perl 5.16 编写的测试用例,其功能取决于旧的哈希实现,并且由于用例数以百计,因此更改代码是完全不可能的。
唷,这是个坏消息。找到那些开发人员,并用副本击中他们的头部perldata
:
哈希是标量值的无序集合,由其关联的字符串键索引。
具体来说 - 如果这对您来说是一个问题,这意味着您的代码库将哈希视为有序,而它们不是并且从来没有。(只是它们在 5.18 之前相当一致,而在 5.18 之后则更加随机)。
来自perldelta
:
当遇到这些变化时,清除它们的关键是接受散列是无序的集合并采取相应的行动。
见:http ://blog.booking.com/hardening-perls-hash-function.html
要回答您的问题 - 如果您真的必须:
./Configure -DPERL_HASH_FUNC_ONE_AT_A_TIME_OLD -des && make && make test
但这是一个非常非常糟糕的主意,因为正如INSTALL
您的 perl 源包中的文件指出的那样:
请注意,从 Perl 5.18 开始,我们只能推荐使用 default 或 SIPHASH。所有其他人都知道有安全问题,仅用于研究目的。
通过以这种方式构建,您为使用它perl
的每个perl
程序引入了一个已知的安全漏洞。
注意 -ONE_AT_A_TIME_HARD
是新的默认值,所以这不会改变 perl 5.18 的工作方式。你可能是说PERL_HASH_FUNC_ONE_AT_A_TIME_OLD