Я пытаюсь написать сценарий Perl, который в основном проверяет, существует ли конкретный файл, соответствующий регулярному выражению, в определенном каталоге. Вот мой код:
use strict;
use warnings;
system ("grep PATH $ENV{MODEL_ROOT}/<....>/paths.tcl > \$MODEL_ROOT/hip_paths.csv");
system("sed -i 's/) /,/g' \$MODEL_ROOT/paths.csv");
system("sed -i 's/set G_L.*,//g' \$MODEL_ROOT/paths.csv");
my @glob;
my $file = "$ENV{MODEL_ROOT}/paths.csv" or die "CSV File is not present\n";
open(my $file_data, '<', $file) or die "Could not open '$file' $!\n";
while (my @line = <$file_data>) {
system ("printf \"@line\" >> fields"); #For debug
foreach my $path (@line)
{
$path =~ m/^.*proj\/(.*)\/<blah>/; #To find 'name'
if (glob ("$path/*0p765v_125c*.ldb")) #Check if file exists in $path with said pattern
{
@glob = glob ("$path/*0p765v_125c*.ldb");
print "File exists for $1 in path $path: @glob\n"
}
else
{
print "Does not exist for $1 in path $path\n";
}
}
}
close $file_data
paths.csv выглядит следующим образом: (Не удается опубликовать фактический путь из-за проблем с TM и C)
/(path-to-proj)/proj/name1/version1/abc
/(path-to-proj)/proj/name2/version2/abc
/(path-to-proj)/proj/name3/version3/abc
/(path-to-proj)/proj/name4/version4/abc
/(path-to-proj)/proj/name5/version5/abc
(путьto proj) буквенно-цифровой,
proj только алфавитный,
name <> буквенно-цифровой и может содержать подчеркивание,
version <> буквенно-цифровой
Я знаю, что всеэти пути имеют файл, который соответствует указанному шаблону. Тем не менее, результат моего кода выглядит примерно так:
File exists for name1 in path /(path-to-proj)/proj/name1/version1/abc
: /(path-to-proj)/proj/name1/version1/abc
Does not exist for name2 in path /(path-to-proj)/proj/name2/version2/abc
File exists for name3 in path /(path-to-proj)/proj/name3/version3/abc
: /(path-to-proj)/proj/name3/version3/abc
Does not exist for name4 in path /(path-to-proj)/proj/name4/version4/abc
Результаты чередуются между «Существует» и «Не существует». Что я делаю не так?