ファイルの比較
■この章で解説するモジュール
File::Compare (compare)
■この章でできること
・ファイル内容が同一であるかを調べる

 2つのファイルの内容が同一であるかどうかを調べたい場合は、File::Compareモジュールを使うとできます。

 では、File::Compareモジュールのサンプルです。最初に3つのファイルを作成し、それぞれの内容を比較しています。

#!/usr/bin/perl

#############################################
# ファイルの比較のサンプル
# Author: "Perl Programming Tips"
#############################################

use File::Compare;

# ファイル作成、書き込み
open(HFILE1, ">file08_01_01.txt") or die($!);
open(HFILE2, ">file08_01_02.txt") or die($!);
open(HFILE3, ">file08_01_03.txt") or die($!);

print(HFILE1 "aaa\n");
print(HFILE2 "aaa\n");
print(HFILE3 "bbb\n");

close(HFILE1);
close(HFILE2);
close(HFILE3);

# ファイル名を指定して比較 
print "compare(file1 file2):" . 
    compare("file08_01_01.txt", "file08_01_02.txt") . "\n";
print "compare(file2 file3):" . 
    compare("file08_01_02.txt", "file08_01_03.txt") . "\n";
print "compare(file3 file1):" . 
    compare("file08_01_03.txt", "file08_01_01.txt") . "\n";

 実行結果は次のようになります。

[g@630m file]$ perl file08_01.pl 
compare(file1 file2):0
compare(file2 file3):1
compare(file3 file1):1
[g@630m file]$ 

 最初にuse File::Compare;でFile::Compareモジュールをインポートしておきます。実際の比較にはcompare関数を使います。compare関数はファイル内容が同一だった場合0を、同一でない場合1を、エラーの場合は-1を返します。

File::Compare::compare
2つのファイルを比較する。
書式
compare file1, file2, [buffsize]
引数
file1:
比較対象のファイル
file2:
比較対象のファイル
buffsize:
比較時に使われるバッファサイズ
戻り値
ファイル内容が同一だった場合は0、同一でない場合は1、エラーの場合は-1。

 File::Compareモジュールには、デフォルトでエクスポートされるcompare関数の他に、明示的にエクスポートするcmp関数があります。cmp関数はcompare関数と同義です。