|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alan Long 2:5030/1082.72 17 Mar 2003 06:39:34 To : All Subject : про рекурсию --------------------------------------------------------------------------------
Hello All!
Хотелось-бы узнать у общественности как правильнее сделать примерно такой код
(это кусок класса ответственного за деревья):
sub tree_list {
my $this = shift;
my $id = shift;
sub _tree_list {
my $this = shift;
my $id = shift;
my $level = shift || 0;
my @rc;
...
push( @rc, $self->_tree_list( $this->node($id)->next, $level + 1 ) );
# $this->node($id)->next - возвращает id, следующего узла
...
return @rc;
}
return $this->_tree_list( $id );
}
Если данные которые находятся в объекте по-каким-либо причинам не корректные, то
возможно зацикливание рекурсивной процедуры. Для этого мы вводим некий хеш для
отлова обработки одинаковых id:
sub tree_list {
...
my %loop;
sub _tree_list {
...
my $id = shift;
...
unless( defined $loop{$id} ) {
$loop{$id} = 1;
....
}
}
...
}
Hо в этом случае perl ругается на то, что %loop не может быть расшарен в
tree_list и _tree_list, сейчас я сделал так:
our %loop = (); # вместо my %loop;
Hасколько это правильное решение ?
Или можно было-бы как-то более проще/правильнее сделать это ?
--
With best,
Ъ-· Ъ
Е-ЧLaі\і <alan@x-rays.eu.org>
--- timEd/386 1.10+
* Origin: X - Rays Station (2:5030/1082.72)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/4581e7539550.html, оценка из 5, голосов 22
|