私が書いているプログラムは、2つのディレクトリを開き、それらのファイルを読み取って、それらのファイルの内容を比較することを想定しています。次に、ファイルで変更された関数をファイルに出力する必要があります。このプログラムは、主に.cppファイルと.hファイルをチェックします。
現在、ディレクトリを調べて現在のファイルを開き、変更された関数を印刷しようとしています。ただし、ファイルがファイルではなく、開くことができないというエラーが表示され続けます。
これが私が使用している現在のコードの一部です
use strict;
use warnings;
use diagnostics -verbose;
use File::Compare;
use Text::Diff;
my $newDir = 'C:\Users\kkahla\Documents\Perl\TestFiles2';
my $oldDir = 'C:\Users\kkahla\Documents\Perl\TestFiles';
chomp $newDir;
$newDir =~ s#/$##;
chomp $oldDir;
$oldDir =~ s#/$##;
# Checks to make sure they are directories
unless(-d $newDir or -d $oldDir) {
print STDERR "Invalid directory path for one of the directories";
exit(0);
}
# Makes a directory for the outputs to go to unless one already exists
mkdir "Outputs", 0777 unless -d "Outputs";
# opens output file
open (OUTPUTFILE, ">Outputs\\diffDirectoriesOutput.txt");
print OUTPUTFILE "Output statistics for comparing two directories\n\n";
# opens both directories
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
ここで、ファイルを開いて読み通します。
elsif((File::Compare::compare("$newDir/$_", "$oldDir/$_") == 1)) {
print OUTPUTFILE "File: $_ has been update. Please check marked functions for differences\n\n";
diff "$newDir/$_", "$oldDir/$_", { STYLE => "Table" , OUTPUT => \*OUTPUTFILE};
#Here is where I want to open the file but when I try it throws an error
#Here are the two opens I have tried:
open (FILE, "<$newDir/$_") or die "Can't open file"; #first attempt
open (FILE, "<$_") or die "Can't open file"; #second attempt to see if it worked
}
フラグを追加してみました
my @allNewFiles = grep { $_ ne '.' and $_ ne '..' && -e $_} readdir newDir;
my @allNewFiles = grep { $_ ne '.' and $_ ne '..' && -f $_} readdir newDir;
しかし、それは単に.plファイル拡張子ではないすべてのファイルを削除するでしょう。.txt、.cpp、.h、.c、.py、および.plファイル拡張子の2つのコピーがあるいくつかの単純なディレクトリでテストしたところ、.plファイルがファイルであることが示されるだけでした。
私はperlを初めて使用するので、助けていただければ幸いです。