Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рекурсия в цикле(Perl)

8.2K
26 марта 2008 года
gorodok
17 / / 22.12.2004
Здравствуйте!

Ниже приведен код функции (назначение-поиск файла на втором уровне).
Пока переменная $obj не задана выполняется нижняя часть кода, в которой рекурсивно вызывается сама функция с заданной переменной $obj. Вопрос в следующем- почему при попытке вызвать её из цикла сам цикл выполняется только один раз, в то время как @path содержит 3 элемента.

Код:
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;
}
2
26 марта 2008 года
squirL
5.6K / / 13.08.2003
а что там перед return @list? в if ($obj)? потому что если заменить
... на @list = qw(1 2 3) - то все работает.

кстати, программа написана без use strict - поэтому учитывайте, что все переменные у вас глобальные и могут непредсказуемо переопределятся при вызове подпрограмм
8.2K
26 марта 2008 года
gorodok
17 / / 22.12.2004
В условном цикле:
opendir(DIR,$dir);
@list = readdir(DIR);
@list = grep(/$obj/i,@list);
return @list;
2
26 марта 2008 года
squirL
5.6K / / 13.08.2003
хм... а можно поинтересоваться, что вы вообще пытаетесь сделать такой программой?
8.2K
09 апреля 2008 года
gorodok
17 / / 22.12.2004
Проблема решилась. Одна из глобальных переменных почему-то меняла свое значение. Я хотел такой рекурсией составить путь, предварительно проверив наличие папок. Это одна из частей.
2
09 апреля 2008 года
squirL
5.6K / / 13.08.2003
надо использовать use strict и не использовать глобальных переменных
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог