Perl:复杂数据结构的校验和

Perl: Checksum of complex data-structure

在 Perl 中有没有 package/function 可以简单地给我

我想到的最好的主意是

  1. 将我的结构序列化为字符串(例如使用 Data::Dumper)

  2. 用 MDx

  3. 散列字符串

但也许还有更优雅的方法。

我会考虑使用

Sereal Encoder

我已经用它来解决类似的问题并且非常满意, 它很快,提供了我能想到的所有选项, 并没有花我很长时间就开始了。

例如,它允许您选择如何处理对象, 以及是否对散列键进行排序,这非常有用。

玩得开心!

过去,我使用 Data::Dumper(使用排序键,如@mob 所指出的)+ Digest::MD5 方法来创建复杂数据结构的校验和。就我而言,目的是比较两个或多个数据结构是否相等。

(非常)简单的片段:

use Data::Dumper qw( Dumper ) ;
use Digest::MD5 qw( md5_hex) ;

sub digest {
    my $data = shift ;
    local $Data::Dumper::Sortkeys = 1;
    return md5_hex( Dumper($data) ) ;
}

剧情简介:

my $cplx_data_checksum = digest({ 
    c => 1 , 
    b => [ 1 , { a => 2 } ]
}) ;

要了解 Digest 算法的速度,请查看位于 https://metacpan.org/pod/Digest#Digest-speed

的 Digest Perl 模块

希望对您有所帮助