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

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

Как мне избежать использования глобальных переменных для хранения собираемых значений и заменить из замыканием?
...
Рейтинг: 0 / 0
13.12.2015, 21:35
    #39126826
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Как избежать глобальной переменной в рекурсивной функции?
Код покажите.
...
Рейтинг: 0 / 0
14.12.2015, 13:53
    #39127296
Vladimir aka jeltoesolnce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Perl] Как избежать глобальной переменной в рекурсивной функции?
Спасибо за ответ, я уже вышел из положения вот таким образом:
Код: 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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] Как избежать глобальной переменной в рекурсивной функции? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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