sub get_env{
($dir,$obj) = @_;
if($obj)
{
...
return @list;
}
@path=get_env($dir,"dir name");
@list=();
for($i=0;$i<scalar(@path);$i++) #getting file list in level 2
{
print get_env($dir.@path[$i]."\\","file name");
}
return @list;
}
Рекурсия в цикле(Perl)
Ниже приведен код функции (назначение-поиск файла на втором уровне).
Пока переменная $obj не задана выполняется нижняя часть кода, в которой рекурсивно вызывается сама функция с заданной переменной $obj. Вопрос в следующем- почему при попытке вызвать её из цикла сам цикл выполняется только один раз, в то время как @path содержит 3 элемента.
Код:
... на @list = qw(1 2 3) - то все работает.
кстати, программа написана без use strict - поэтому учитывайте, что все переменные у вас глобальные и могут непредсказуемо переопределятся при вызове подпрограмм
opendir(DIR,$dir);
@list = readdir(DIR);
@list = grep(/$obj/i,@list);
return @list;
хм... а можно поинтересоваться, что вы вообще пытаетесь сделать такой программой?
Проблема решилась. Одна из глобальных переменных почему-то меняла свое значение. Я хотел такой рекурсией составить путь, предварительно проверив наличие папок. Это одна из частей.
надо использовать use strict и не использовать глобальных переменных