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

BugTraq: обнаруженные ошибки и обсуждение их устранения.

Модератор: 4epT

manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

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

Сообщение 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?
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

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

Сообщение EternalHarvest »

Просто не надо использовать глобальные FILEHANDLE.
Fixed (r7336).
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

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

Сообщение manticora »

Отлично, спасибо.
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
Ответить