Сравнение двух каталогов с использованием Perl

я новичок в Perl, так что извините за мою нубность

Вот что я собираюсь сделать.

$ perl dirComp.pl dir1 dir2

dir1 и dir2 являются именами каталогов.

Скрипт dirComp.pl должен определить, является ли содержимое в dir1 и dir2 идентичным или нет.

Я придумал алгоритм

Store all the contents of dir1(recursively) in a list
Store all the contents of dir2 in another list
Compare the two list, if they are same - dir1 & dir2 are same else not.

my @files1 = readdir(DIR1h);
my @files2 = readdir(DIR2h);

    # Remove filename extensions for each list.

        foreach my $item (@files1) {
        my ( $fileName, $filePath, $fileExt ) = fileparse($item, qr/\.[^.]*/);
        $item = $fileName;
        }


        foreach my $item (@files2) {
        my ( $fileName, $filePath, $fileExt ) = fileparse($item, qr/\.[^.]*/);
        $item = $fileName;
        }

Я не могу рекурсивно просматривать подкаталоги в данном каталоге с помощью приведенного выше кода. Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: Использование файла: DirCompare

#!/usr/bin/perl -w

use File::DirCompare;
use File::Basename;

if ($#ARGV < 1 )
{
        &usage;
}

my $dir1 = $ARGV[0];
my $dir2 = $ARGV[1];

File::DirCompare->compare($dir1,$dir2,sub {
        my ($a,$b) = @_;
        if ( !$b )
        {
                printf "Test result:PASSED.\n";
                printf "Only in %s : %s\n", dirname($a), basename($a);
        }elsif ( !$a ) {
                printf "Test result:PASSED.\n";
                printf "Only in %s : %s\n", dirname($b), basename($b);
        }else {
                printf "Test result:FAILED.\n";
                printf "Files $a and $b are different.\n";
        }
});

У меня есть структура каталогов, как показано ниже,

dir1/                  dir2/
    --file1.txt            --file1.txt
    --file2.txt            --file2.txt
    --file3.cpp            --file3.cpp

Я столкнулся с результатом теста: FAILED. В результате, должно быть, прошло. Кто-нибудь может поправить меня?

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос