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