LINUX.ORG.RU

Помогите с Perl разобраться.


0

0

Читаю исходники RTF парсера.

1: sub _call_control_handler {
2:	if (exists $_DestStack[-1][2]{$_[0]}) {
3:		_flush_text();
4:		print {::TRACE_FH} "Handling '$_[0]'\n" if TRACE_GROUPS;
5:		&{$_DestStack[-1][2]{shift()}};
6: #		} else {
#			print {::TRACE_FH} "Not Handling '$_[0]' in $_DestStack[-1][0]\n";
	}
}

Что происходит в строке 1? Что за конструкция: $_DestStack[-1][2]{$_[0]}

А в 5-ой строке?

Что за {::TRACE_FH} в 4-ой строке?
anonymous

> Что происходит в строке 1?

Имел ввиду строку 2, конечно.

Я понимаю, что тут как-то вызываются обработчики в зависимости от неких ключей, но синтаксис всего этого просто непонятен.

anonymous
()

Гдеж ты такой кошмар нашёл? Ссылку в студию =)))

Есть такая штука (на будущее) - perldoc. пишешь 'perldoc exists' =))

exists проверяет что есть пара с ключом $_[0] в хеше $_DestStack[-1][2]
Что такое DestStack - ХЗ =) Потому что в perlvar не написано - возможно это просто переменная определённая выше.
{::TRACE_FH} - эта штука обращается к основному модулю (поэтому перед :: ничего нет) и берёт из него file-handler TRACE_FH.
Пришлось писать {} скорее всего потому что $ и прочей фигни нету - потому что это именно FH.
$_DestStack[-1][2]{} Это массив в котором массивы в которых хеши.
[-1] как я понимаю это берётся последний элемент первого массива,
типа как если $_DestStack[ $#$DestStack ][2]{}

@_ - это массив переданных переменных, $_[0] - соотв первая из них
shift @_ - это выбрать $_[0] и удалить её из @_ (сдвигом).

&{} не помню что такое =(

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

Аааааааааааа!!!! &{} в данном случае означает преборазование содержимого к указателю на функцю. Ну и запуск её вестимо =)) Так что значения хеша - это указатели на функции.

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

расколбас, вы еще вспомните perl-строку с закодированным удалением всех файлов :))

anonymous
()
Ответ на: комментарий от vahvarh

> Где ж ты такой кошмар нашёл? Ссылку в студию =)))

http://laurent.caprani.free.fr/econoweb/rtf/

> ?Econoweb RTF parser & tools? is a set of Perl codes that are aimed at a nearly-no-cost solution for Web contents production.

> The option that is taken is to use Word processors to create those contents. Creating contents is different from editing Web pages, since you don?t specify the style (how pages look) nor the structure (organization of pages, frames, etc.) of the site.

Econoweb RTF Parser & Tools файл RTF/parser.pl из файла http://laurent.caprani.free.fr/econoweb/rtf/econoweb050126.zip

Вот пытаюсь разобраться в этом

> $_DestStack[-1][2]{} Это массив в котором массивы в которых хеши.

Спасибо, кое-что прояснил. Но завернуто французами мощно. Я хочу добавить обработку некоторых непредусмотренных этим парсером управляющих символов в RTF. А именно, юникодного представления символов в виде \uЦИФРЫ_КОДА чего этот парсер не делает и вообще его utf-8 это что-то оригинальное.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.