【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

Algorithm::Diff - 差分モジュールの話題ですが、このページの内容は古くなっています。

差分モジュールの話題ですが、このページの内容は古くなっています。


 #!/usr/local/bin/perl
 use lib ".";
 use CGI::Carp 'fatalsToBrowser';
 use Algorithm::Diff qw(traverse_sequences);


以下は、差分機能を入れるための下準備です。

    use Algorithm::Diff qw(diff);
    use strict;

    my @msg1 = split(/\n/, <<'EOD');
     1ドル83セント。それで全部。しかもそのうち60セントは小銭でした。
    小銭は一回の買い物につき一枚か二枚づつ浮かせたものです。乾物屋や八百屋
    や不動産屋
    や肉屋に無理矢理まけさせたので、しまいに、こんなに値切るなんてという無
    言の非難で頬が赤くなるほどでした。デラは三回数えてみました。でもやっぱ
    り1ドル87セント。明日はクリスマスだというのに。 
     これでは、まったくのところ、粗末な小椅子に突っ伏して泣くしかありませ
    ん。ですからデラはそうしました。そうしているうちに、人生というものは、
    わあ泣くのが大部分を占めていると思うようになりました。 
    EOD

    my @msg2 = split(/\n/, <<'EOD');
     1ドル87セント。それで全部。しかもそのうち60セントは小銭でした。
    小銭は一回の買い物につき一枚か二枚づつ浮かせたものです。乾物屋や八百屋
    や肉屋に無理矢理まけさせたので、しまいに、こんなに値切るなんてという無
    言の非難で頬が赤くなるほどでした。デラは三回数えてみました。でもやっぱ
    り1ドル87セント。明日はクリスマスだというのに。 
     これでは、まったくのところ、粗末な小椅子に突っ伏して泣くしかありませ
    ん。ですからデラはそうしました。そうしているうちに、人生というものは、
    わあわあ泣くのと、しくしく泣くのと、微笑みとでできており、しかも、わあ
    わあ泣くのが大部分を占めていると思うようになりました。 
    EOD

    my $diffs = diff(\@msg1, \@msg2);
    my @msg = @msg2;
    foreach (@msg) {
        $_ = "  " . $_;
    }
    foreach (reverse @$diffs) {
        foreach (reverse @$_) {
            my ($sign, $index, $text) = @$_;
            if ($sign eq '+') {
                substr($msg[$index], 0, 1, "+");
            } else {
                splice(@msg, $index, 0, "- $text");
            }
        }
    }
    foreach (@msg) {
        print $_, "\n";
    }

実行結果は以下の通り。

    -  1ドル83セント。それで全部。しかもそのうち60セントは小銭でした。
    +  1ドル87セント。それで全部。しかもそのうち60セントは小銭でした。
      小銭は一回の買い物につき一枚か二枚づつ浮かせたものです。乾物屋や八百屋
    - や不動産屋
      や肉屋に無理矢理まけさせたので、しまいに、こんなに値切るなんてという無
      言の非難で頬が赤くなるほどでした。デラは三回数えてみました。でもやっぱ
      り1ドル87セント。明日はクリスマスだというのに。
       これでは、まったくのところ、粗末な小椅子に突っ伏して泣くしかありませ
      ん。ですからデラはそうしました。そうしているうちに、人生というものは、
    + わあわあ泣くのと、しくしく泣くのと、微笑みとでできており、しかも、わあ
      わあ泣くのが大部分を占めていると思うようになりました。


みふと申します。 Active Perl 5.005_03 です。

PPM で Algorithm::Diff をインストールしようとしたところ、 うまくいきませんでした。

どうしてなのでしょうか?

なにかお分かりになる方、いらっしゃいましたら……

 PPM interactive shell (1.1.1) - type 'help' for available commands.
 PPM> search Algorithm-Diff
 PPM> install Algorithm::Diff
 Install package 'Algorithm::Diff?' (y/N): y
 Retrieving package 'Algorithm::Diff'...
 Error installing package 'Algorithm::Diff': Could not locate a PPD file for 
 package Algorithm::Diff


Algorithm::Diffのドキュメントの日本語化してperldocjpに登録しました。Hippo2000

http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/perldocjp/docs/modules/Algorithm-Diff-1.15/
http://sourceforge.jp/projects/perldocjp