ファイルの比較
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関数と同義です。