perl – 如何创建数据结构的可重复签名?

我有一种情况,我想创建一个数据结构的签名:
my $signature = ds_to_sig(
  { foo   => 'bar',baz   => 'bundy',boing => undef,number => 1_234_567,}
);

目的应该是,如果数据结构发生变化,那么应该签名.

有没有确定的方法来做到这一点?

解决方法

最好的方法是使用像 Storable这样的深层次的序列化系统.具有相同数据的两个结构将产生相同的可存储输出的Blob,因此可以进行比较.
#!/usr/bin/perl

use strict;
use warnings;

use Storable ('freeze');

$Storable::canonical = 1;

my $one = { foo => 42,bar => [ 1,2,3 ] };
my $two = { foo => 42,3 ] };

my $one_s = freeze $one;
my $two_s = freeze $two;

print "match\n" if $one_s eq $two_s;

…并证明逆向:

$one = [ 4,5,6 ];
$one_s = freeze $one;

print "no match" if $one_s ne $two_s;

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...