Страница 1 из 1

[решено] [макро-плагин] спотыкается после первого !include

Добавлено: Ср май 26, 2010 3:01 pm
manticora
Приветствую.
Скачал из svn свежую версию макро-плагина. И обнаружил такой глюк: если в файле macros.txt прописать директиву !include, то всё остальное, что следует за этой директивой - просто код макросов и другие !include - пропускается, не прочитывается макро-плагином.
Вот например, есть пара файлов, которые подключаются !include'ами и файл с макросами:
control filea.txt

Код: Выделить всё

#
macro a {
	log This is "a" from include
}
control fileb.txt

Код: Выделить всё

#
macro b {
	log This is "b" from include
}
control macros.txt

Код: Выделить всё

#
macro c {
	log This is "c" from macros.txt
}

!include filea.txt

macro d {
	log This is "d" from macros.txt
}

!include fileb.txt

macro e {
	log This is "e" from macros.txt
}
Вводя в консоли команду macro list я ожидаю увидеть список из пяти макросов - a, b, c, d, e. Но макро-плагин спотыкается после первого !include и видно только два макроса c, a.
Лог консоли:

Код: Выделить всё

macro list
The following macros are available:
----------macros---------
c
a
--------automacros-------
---------Perl Sub--------
-------------------------
Добавлено спустя 2 часа 29 минут 56 секунд:
Я не знаю, в чём дело, но методом физического тыка выяснил следующее:
Сейчас в файле openkore\plugins\Macro\Parser.pm есть такой код:

Код: Выделить всё

	open FILE, "<:utf8", $file or return 0;
	while (<FILE>) {
		$. == 1 && s/^\x{FEFF}//; # utf bom
		s/(.*)[\s\t]+#.*$/$1/;	# remove last comments
		s/^\s*#.*$//;		# remove comments
		s/^\s*//;		# remove leading whitespaces
Если от цикла while вернуться к бывшему ранее циклу foreach, то макро-плагин перестаёт спотыкаться после первого !include.

Код: Выделить всё

	open FILE, "<:utf8", $file or return 0;
	foreach (<FILE>) {
		$. == 1 && s/^\x{FEFF}//; # utf bom
		s/(.*)[\s\t]+#.*$/$1/;	# remove last comments
		s/^\s*#.*$//;		# remove comments
		s/^\s*//;		# remove leading whitespaces
Не знаю, какая такая разница между циклами foreach и while?

Re: [макро-плагин] спотыкается после первого !include

Добавлено: Ср май 26, 2010 3:21 pm
EternalHarvest
Просто не надо использовать глобальные FILEHANDLE.
Fixed (r7336).

Re: [макро-плагин] спотыкается после первого !include

Добавлено: Ср май 26, 2010 4:03 pm
manticora
Отлично, спасибо.