Posterous theme by Cory Watilo

Filed under: интроспекция

Perl. JAPH или полная интроспекция или вынос мозга

[info]what_me меня очень сильно удивил и порадовал. На раз пишет JAPH, который удовлетворяет всем требованиям интроспекции на Perl и просто выносит мозг :) Эволюция кода и ответы на вопросы: зачем и почему в предыдущем посте.

s bbq oprint
q as a and print
grep!
m aca, grep!
m cac, a.. c, a..
c and print q aq a and print grep!
m pnp, grep!
m npn, n.. p and print and print
grep!
m pnp, grep!
m npn, n.. p and print grep!
m cac, grep! m aca, a..
c and print q qe and q and printobe and print
q as a and print
grep!
m aca, grep!
m cac, a.. c, a..
c and print q aq a and print grep!
m pnp, grep!
m npn, n.. p and print and print
grep!
m pnp, grep!
m npn, n.. p and print grep!
m cac, grep! m aca, a..
c and print q qe and q and print
Perl – великий язык, как хорошо, что не перевелись на земле русской богатыри (здесь я имею в виду перловика what_me из Минска :)!

ЗЫ: предыдущие 2 поста и этот маркированы тегом ironman, подробности www.enlightenedperl.org/ironman.html www.shadowcat.co.uk/blog/matt-s-trout/iron-man/ ironman.enlightenedperl.org/; вкратце: каждую неделю пост о Perl, про Perl и на Perl, 4 поста в месяц и так полгода, в результате я стану  Железным Человеком, а пока бумажный :)


Original post http://sharifulin.livejournal.com/44622.html

Perl. Полная интроспекция кода

На May Perl 2009 будет доклад "Курс Perl в УрГУ", так сказать "Hello world" с Урала :)

На сайте курса нашел примеры полной интроспекции кода на Perl (т.е. нужно показать исходный код программы, не используя чтение/запись файла).

Решил написать свой вариант на Perl (только перловый, а не академический), а потом посмотреть на имеющиеся. Долго думать не стал, получилось следующее:

print, printf 'q(%s)', $_ for q(print, printf 'q(%s)', $_ for )
Из готовых вариантов понравился:
print <DATA>x2 __DATA__
print <DATA>x2 __DATA__

Вариант с наполнением массива я еще на Паскале писал (ну как писал, больше гуглил :).

О! Френды-перловики, хотелось бы увидеть ваши варианты.

UPD: 

Вариант от [info]mcfist :

require B::Deparse;
'B::Deparse'->compile->();
$_ = 'Hello World!';
Вариант от [info]pavel_kudinov  :
s{[[:digit:]]|^(?!.)}{s{[[:digit:]]|^(?!.)}{1} while !length...0;print} while !length...0;print
Вариант от [info]what_me :

s ffq bprint q ts t, chr 0146, chr 0146, qq tq t, chr 0142 and print and print chr 0142, chr 0146, q te;t and printbfe;print q ts t, chr 0146, chr 0146, qq tq t, c


Original post http://sharifulin.livejournal.com/44428.html