Так что у меня возникла проблема с разделом переменной, которая имеет полный путь к каталогу. Я хочу получить файлы в каталоге «logs» этого пути: '/ nfs/fm/disks/fm_mydiskhere_00000/users/me/repotest/myrepo/tools/toolsdir/logs/*';Perl: разделение переменной, содержащей путь к каталогу
и в моем скрипте Perl у меня есть переменная, которая содержит этот путь: '$ log_file'. Когда я печатаю '$ log_file', он содержит весь путь; Я хочу перейти в последний журнал журналов и получить файлы под ним. Кстати, этот полный путь находится в отдельном файле конфигурации, который читается мой сценарий Perl так:
sub read_file {
my ($log_file) = shift(@_);
info ("Using file : $log_file");
my $fh = new FileHandle ("$log_file");
printError ("Could not open this file : '$log_file' - $!") unless defined $fh;
my $contents;
{
local $/ = undef;
$contents = <$fh>;
}
$fh->close();
eval $contents;
if ([email protected]) {
chomp [email protected];
my $msg = "BAD (perl) syntax in file:\n\[email protected]\n";
if ($msg =~ /requires explicit package name/) {
$msg .= "\n -> A 'requires explicit package name' message means".
" a NON-VALID variable name was found\n";
}
die "Error: $msg\n\n";
}
return 1;
}
И я использую переменную $ LOG_FILE в другой подпрограмме следующим образом:
my $fh = read_file ($log_file);
if ($log_file eq "abc.txt"){
while (my $line = <$fh>) {
#do something
}
}
Может ли кто-нибудь помочь мне здесь, пожалуйста? Я что-то упустил или с помощью $ log_file не так?
Заранее благодарен!
Я предполагаю, что 'FileHandle' не в состоянии принимать групповые символы. Это имеет смысл, потому что File Handle - это дескриптор одного файла. Попробуйте назначить путь к одному файлу в '$ log_file' и посмотреть, устраняет ли это ваши проблемы. – wilkesybear
Я получаю вашу точку зрения. Но под каталогом «/ logs» есть несколько файлов, и я выполняю различные операции над каждым файлом в зависимости от его имени. $ log_file читает весь путь ('/ nfs/fm/disks/fm_mydiskhere_00000/users/me/repotest/myrepo/tools/toolsdir/logs/*';), я не уверен, как заставить его читать файлы с в последнем каталоге «/ logs». – chmod
Как использовать [readdir] (http://perldoc.perl.org/functions/readdir.html), чтобы сначала перебирать каждое имя файла, а затем вставлять всю свою логику в этот цикл? Вот еще один вопрос/ответ на переполнение стека, который может помочь http://stackoverflow.com/questions/6442889/perl-iterate-through-directories/6443023#6443023 – wilkesybear