Попросили сделать разбор одного примера из perl100 (ивент для первокуров компьютерных специальностей в нашем универе). Возможно, памятуя то, что одним из авторов разбора 3х-летней давности был я.
Точнее примеров мне дали несколько, но понравился этот
(*$,$_)=(sub{q&q&})x2;/./&print &$&$&;
— собственно, вот он — пример.
# (*$,$_)=(sub{q&q&})x2;/./&print &$&$&; # (*$,$_)=(sub{q&q&})x2; *$ = sub{q&q&}; # теперь у неименованной процедуры появилось имя '$' $_ = sub{q&q&}; # а в $_ - ссылка на эту функцию # sub a {print 1}; # $_ = \&a; # &{$_} # print "\n$_"; # ^D # 1 # CODE(0x225c98) # /./&print &$ & $&; - вычисляем последовательно match # (сравнение переменной по умолчанию с шаблоном), вычисляем print , # делаем побитовое "и" (последний шаг - для отвода глаз. с таким же # успехом можно было поставить между сравнением и принтом ";") $_ =~ m/./; # $& - Последняя найденная подстрока при сопоставлении. # В нашем случае это 'C' (цэ) (первый любой символ в строке "CODE(0x225c98)") # ну и делаем побитовое "и" для результата работы функции $ и последней найденной строки # ах да, функция вернёт последнее вычисленное значение # в нашем случае это 'q'. Поясняю: q&q& эквивалентно q/q/. "&" - для отвода глаз. $a = 'q' & 'C'; print $a; # Разбор сделан Helios'ом # Привет первокурам!![]()
Вот такой он, добрый Perl, в «недобрых» руках
Мне понравилась эта заметка: