[Moscow.pm] get own source code

Анатолий Гришаев 0body0 на rambler.ru
Вт Мар 31 04:41:58 PDT 2015


Нужно воспользоваться специальными комментариями

#line xxx "fileyyy"

Тогда сообщения об ошибке будут лучше указывать на место проблемы.
Самое сложное это генерация адекватных filexxx и строки.
В filexxx можно вставить имя макроса которое подменяешь + параметры + 
номер исходной строки, а в номер строки 1 для

Пример использования этих комментариев:
=======================
sub main{
     my @argv  = @_;
# line 999 "a distant galaxy"
     die "Ship сrashed";

};
=======================
Ship сrashed at a distant galaxy line 999.
=======================

Сообщения об других ошибках тоже будут привязаны к этим маркерам

28.03.2015 19:07, PEF Secure пишет:
> Hi,
>
> прошу направить меня на путь.
>
> Хочется получить собственный исполняемый код, который виден интерпретатору.
> Нужен буквальный код, на который ссылается интерпретатор, когда говорит "такая
> то ошибка в такой то строке". Дело не решается чтением исходного кода
> соответствующего файла с диска, поскольку речь идёт о "фильтрованном" коде.
> Вот надуманный пример:
>
> package TestFilter;
> use Filter::Simple;
> FILTER_ONLY code => sub {
> 	s/\bIF\b(.*?) THEN/if($1){/g;
> 	s/\bELSE\b/} else {/g;
> 	s/\bEND IF\b/}/g;
> 	s/\bEND\b/}/g;
> };
> 1;
>
> use TestFilter;
> use v5.018;
>
> eval { IF 1 == 2 THEN say "impossible" ELSE say "yes" END IF };
>
> Если внутри eval-а будет ошибка, то хочется увидеть тот самый код, что там
> исполнялся интерпретатором перла.



Подробная информация о списке рассылки Moscow-pm