0

假设我有以下

my $clean = {
    foo => 1,
    bar => 2,
    baz => 3,
};


my $dirty => {
     foo    => 1,
     bar    => 3,
     blargh => 4,
};


my $differ = Differ->new; #made up object

$differ->compare( $clean, $dirty );


$differ->added;   # blargh
$differ->removed; # baz
$differ->updated; # bar

以上可能是我尝试做的一个非常新颖的例子(而且我的回报可能不够复杂)。是否有任何模块可以为我做到这一点?

我基本上是想弄清楚如何通过更改来计算要发送到远程服务器的内容。该模块理论上应该能够处理包括数组在内的复杂数据结构(不需要自引用)

4

1 回答 1

0

Data::Diff 没有您正在寻找的漂亮的 OO 界面,但它似乎可以解决问题。

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

use Data::Diff;

my $clean = {
    foo => 1,
    bar => 2,
    baz => 3,
};

my $dirty = {
     foo    => 1,
     bar    => 3,
     blargh => 4,
};

my $diff = Data::Diff->new($clean, $dirty)->raw();

say "Added: ", join(", ", sort keys %{ $diff->{uniq_b} });
say "Removed: ", join(", ", sort keys %{ $diff->{uniq_a} });
say "Updated: ", join(", ", sort keys %{ $diff->{diff} });

根据您的示例输出:

alex@yuzu:~$ ./data_diff.pl 
Added: blargh
Removed: baz
Updated: bar
于 2014-06-03T20:55:33.697 回答