Как заголовок - пожалуйста, кто-нибудь может объяснить, как работают следующие скрипты
это напечатает текст: "Perl ребята умные"
''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
это печатает только "b"
use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
perl -MO=Deparse показывает только это:
use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
но не знаю почему... ;(
Каков рекомендуемый способ декомпозиции подобных скриптов? Как начать?
так, попробовал это:
'' =~
(
'(?{'
.
(
'])@@^{' ^ '-[).*['
)
.
'"'
.
(
'-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'
)
.
',$/})'
)
несколько частей объединены .
. И результат побитового ^
, вероятно, дает части текста. В:
perl -e "print '-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'"
печатает "Perl ребята умные" и первый ^
генерирует "print".
Но когда я переписываю его на:
'' =~
(
'(?{'
.
(
'print'
)
.
'"'
.
(
'Perl guys are smart'
)
.
',$/})'
)
Мой перл сказал мне:
panic: top_env
Странно, первый раз вижу такое сообщение об ошибке...
Это значит: нельзя заменять 'str1' ^ 'str2'
на result
(не понимаю почему) и почему perl печатает паническое сообщение?
мой перл:
This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-multi-2level
Ps: примеры генерируются здесь