Perl相当于Python的hash(或Java的hashCode)函数?

时间:2015-04-15 15:34:00

标签: python perl hash

Python的hash函数的摘要文档为:

Type:        builtin_function_or_method
String form: <built-in function hash>
Namespace:   Python builtin
Docstring:
hash(object) -> integer

Return a hash value for the object.  Two objects with the same value have
the same hash value.  The reverse is not necessarily true, but likely.

(例如,hash函数应用于上面的文档字符串时返回整数3071661466461282235。)

Perl是否有相同的功能?

编辑:我正在寻找的不需要为任何参数返回与Python的hash函数相同的值。

2 个答案:

答案 0 :(得分:1)

有多种方法可以对对象进行哈希处理。使用perl执行此操作的最佳方法是通过模块。

E.g。 Digest::SHA

哪个会这样:

use Digest::SHA qw(sha1 sha1_hex sha1_base64 ...);

$digest = sha1($data);
$digest = sha1_hex($data);
$digest = sha1_base64($data);

$digest = sha256($data);
$digest = sha384_hex($data);
$digest = sha512_base64($data);

您可以通过在CPAN shell i /Digest/中运行perl -MCPAN -e shell来查看各种选项的列表。 Digest::MD5是另一个常见的选择。

我建议对于琐碎的实现,它实际上并没有你使用的很多区别。如果它不重要,则存在与哈希冲突有关的安全问题。

答案 1 :(得分:1)

首先,您应该重载对象的“to-string”方法。如果你只想在哈希中使用对象作为键,那就足够了。 Perl应用一些内部哈希机制来快速键值访问。

其次,您可以将任何散列机制应用于结果字符串,例如Digest::SHA,或者,如果您不需要强大的安全要求,那么您可以使用Digest::MurmurHash(已宣布的MurmurHash速度 5Gb / s !)。