Algorithm::Diff

Algorithm::Diff - Compute `intelligent' differences between two files / lists
'インテリジェント'に2つのファイル/リストの違いを算出する

試してみる。

use Algorithm::Diff qw(sdiff);
use Data::Dumper;

my @diffs = sdiff(
   [qw(
       <html>
       <body>test</body>
       </html>
   )],
   [qw(
       <html>
       <body>Test..</body>
       </html>
   )]);
print Dumper(@diffs);
$VAR1 = [
         'u',
         '<html>',
         '<html>'
       ];
$VAR2 = [
         'c',
         '<body>test</body>',
         '<body>Test..</body>'
       ];
$VAR3 = [
         'u',
         '</html>',
         '</html>'
       ];
  • 第一引数と第二引数のリストの各要素を比較していく
  • 1つしか要素のないリストだと丸っと全体での判定しかしない
  • 適切な粒度で要素に区切ることが重要(通常は改行コードでよさげ)