[Moscow.pm] get own source code
Maxim Vuets
maxim.vuets на gmail.com
Вс Мар 29 11:05:37 PDT 2015
2015-03-28 17:07 GMT+01:00 PEF Secure <pef-secure на yandex.ru>:
> Хочется получить собственный исполняемый код, который виден интерпретатору.
> Нужен буквальный код, на который ссылается интерпретатор, когда говорит "такая
> то ошибка в такой то строке". Дело не решается чтением исходного кода
> соответствующего файла с диска, поскольку речь идёт о "фильтрованном" коде.
Это невозможно в чистом виде. Интерпретатор не выполняет текст
программы. Он прежде компилирует её в специальное внутренне
представление. Если вы компилируете код на лету, или модифицируете
программу во время исполнения, то и "буквального кода" у вас нет.
Можно попробовать декомпилировать внутренне представление братно в
текст программы. Но он будет достаточно приблеженным и не обязательно
удобно-читаемым. Вот вам привет для вдохновления:
$ perl -MB::Deparse -E 'my $f = eval "sub {shift() + shift()}"; #
компилируем строку во время исполнения \
say $f->(2, 3); # проверяем \
my $d = B::Deparse->new; say $d->coderef2text($f); # декомпилируем'
5
{
use feature 'current_sub', 'evalbytes', 'fc', 'say',
'state', 'switch', 'unicode_strings', 'unicode_eval';
(shift()) + (shift());
}
Вы какую задачу решить пытаетесь-то?
Подробная информация о списке рассылки Moscow-pm