В настоящее время я пишу программу, которая в конечном итоге будет сравнивать файлы в двух каталогах и отображать функции, которые были изменены в каждом файле. Тем не менее, я столкнулся с проблемой при проверке, является ли то, что находится в каталоге, является файлом или является подкаталогом. Прямо сейчас, когда я проверяю, является ли это просто каталогом с проверкой -d, он не попадает ни в один из подкаталогов. Я разместил часть своего кода ниже.Perl: определение того, является ли вход файлом или каталогом
opendir newDir, $newDir;
my @allNewFiles = grep { $_ ne '.' and $_ ne '..'} readdir newDir;
closedir newDir;
opendir oldDir, $oldDir;
my @allOldFiles = grep { $_ ne '.' and $_ ne '..'} readdir oldDir;
closedir oldDir;
foreach (@allNewFiles) {
if(-d $_) {
print "$_ is not a file and therefore is not able to be compared\n\n";
} elsif((File::Compare::compare("$newDir/$_", "$oldDir/$_") == 1)) {
print "$_ in new directory $newDirName differs from old directory $oldDirName\n\n";
print OUTPUTFILE "File: $_ has been update. Please check marked functions for differences\n";
print OUTPUTFILE "\n\n";
print OUTPUTFILE "+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n\n";
} elsif((File::Compare::compare("$newDir/$_", "$oldDir/$_") < 0)) {
print "$_ found in new directory $newDirName but not in old directory $oldDirName\n";
print "Entire file not printed to output file but instead only file name\n";
print OUTPUTFILE "File: $_ is a new file!\n\n";
print OUTPUTFILE "+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n\n";
}
}
foreach (@allOldFiles) {
if((File::Compare::compare("$newDir/$_", "$oldDir/$_") < 0)) {
print "$_ found in old directory $oldDirName but not in new directory $newDirName\n\n";
}
}
Благодарим за помощь!
две вещи: 1. Bareword ручки плохо (конечно, вы сказали, это потому, что вы 'использовать строги и' предупреждения использования; ', * right *?) и 2. почему бы не просто 'grep {-f $ _}' на 'readdir' дескриптора каталога? –
Я использую строгое использование; и использовать предупреждения; И когда я попытался использовать grep {-f $ _}, он не прочитал бы никаких файлов, кроме файлов perl. – Kat
Затем запустите. Если вы не делаете бросок с одним слоем, вы должны «использовать строгую» и «использовать предупреждения» в каждом отдельном коде Perl, который вы пишете. –