Я являюсь относительно нечастым пользователем Perl. Я написал сценарий, который принимает два входных файла с тем же именем, но с разными расширениями, обрабатывает их и выводит третий файл. Он работает, когда я указываю имя файла, но я хочу, чтобы он искал все соответствующие файлы в каталоге и обрабатывал все из них. Однако, когда я это делаю, он продолжает говорить, что нет такого файла или каталога - хотя я уверен, что есть. Я просмотрел все соответствующие страницы на этом сайте и пробовал там предложения, но он все равно не работает. Я в тупике.Perl не умеет найти файл
Это код, отсутствующий в обработке самих файлов, поскольку это длинный и не релевантный.
use strict;
use warnings;
use autodie;
#specify single file - works when this is not commented and the loops below are
#my $file = "BE_Read01_f2-2";
#on a Mac
my $dir = "/Users/sashacalhoun/Documents/supervision/tariq/Syllables";
opendir(my $dh, $dir);
while (my $file = readdir($dh)) {
if($file=~s/(.+-CV)\.TextGrid/$1/) {
print "$file\n";
open(my $syl, "<", "$dir/${file}.par");
while(my $line=<$syl>) {
#processes this file - not included
}
close($syl);
my $gridfile = "$file-CV.TextGrid";
my $outfile = "$file-syl.TextGrid";
open(my $grid, "<", $gridfile);
open(my $out, ">", $outfile);
while(my $line=<$grid>) {
print $out $line;
# other processing of this file
}
close($grid);
close($out);
}
}
Он говорит: Can't open '/Users/sashacalhoun/Documents/supervision/tariq/Syllables/BE_Read01_f2-1-CV.par' for reading: 'No such file or directory' at ./get_syl.pl line 36
Большое спасибо за вашу помощь.
Вы действительно точно знаете, что существует? Выполняется ли тест '-e'? – tadman
Было бы лучше проверить, было ли ваше жестко запрограммированное имя файла 'BE_Read01_f2-1-CV.TextGrid'. Посмотрите, работает ли это с вашим циклом while. Кстати, вы добавляете второй '-CV' к имени вашего файла, когда вы определяете' $ gridfile'. Ваша подстановка удаляет '.TextGrid' с конца, и вы возвращаете' -CV.TextGrid'. – Borodin