powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] Как избежать глобальной переменной в рекурсивной функции?
3 сообщений из 3, страница 1 из 1
[Perl] Как избежать глобальной переменной в рекурсивной функции?
    #39111332
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

Разбираю XML-документ, функция рекурсивная, обходит документ и собирает данные, разделяя их на три различных блока.

Как мне избежать использования глобальных переменных для хранения собираемых значений и заменить из замыканием?
...
Рейтинг: 0 / 0
[Perl] Как избежать глобальной переменной в рекурсивной функции?
    #39126826
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код покажите.
...
Рейтинг: 0 / 0
[Perl] Как избежать глобальной переменной в рекурсивной функции?
    #39127296
Фотография Vladimir aka jeltoesolnce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ, я уже вышел из положения вот таким образом:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
sub getData {
	my	( $tag, $prop )	= @_;
	# Transcription, examples, text
	my ( $trc, $ex, $text ) = '';
	return $text unless $tag;
	
	sub collectText {
		# The sub is for collect and 
		# return intermediate data as closure
		my	$x	= '';
		my 	$level = 0; # In next sub level will be increaced
						# and it will show reall level of detData.
		sub {
			my $y = shift;
			my $r = '';
			if ( defined $y && $y ne '' ) {
				if ( $y eq '&&&increase&&&' ) {
					$level ++;
				} elsif ( $y eq '&&&decrease&&&' ) {
					$level --;
				} elsif ( $y eq '&&&result&&&' ) {
					$r = $x;
					$x = '' if $level == 0;
				} else {
					$x .= $y;
				}
			} else {
				return $x;
			}	
		return $r;
		};
	} ## --- end sub collectText

	# Initialize count
	our $collectEx = collectText() unless $collectEx;
	our $collectTransc = collectText() unless $collectTransc;
	...
        ...


Подпрогамма собирает в пер. $x строки, затем выводир резултат в $r. $level фиксирует вложенные вызовы getData для того, чтобы периодически очищать $x.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] Как избежать глобальной переменной в рекурсивной функции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]