Оператор goatse в Перле
Внезапно вспомним Перл.
Есть такая шутка, что Перл единственный язык, программа на котором до и после
not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort splitЕсли не верите, попробуйте запустить, ничего страшного не произойдёт. Очень много шуток есть по поводу того, каким ненатуралом надо быть, чтобы программировать на этом языке и в этом тоже есть доля правды.
Я постараюсь пропустить неаппетитные подробности, но есть такой мем «goatse» — это картинки мужичка, в деталях показывающего свою тёмную неизвестность, а так же пародии на неё. Не гуглите пожалуйста это, прошу, нет, даже умоляю, не надо. Та картинка, как любой
Для нас важно, что после того как картинка стала мемом, появился смайлик „=()=“, довольно точно отражающий её суть. Я знаю эту преамбулу, потому что однажды
Например, вам нужно подсчитать сколько цифр содержится в строке. На помощь вам придёт goatse operator!
my $s = "Hello, world! This is a Perl! 123456";
my $c =()= $s =~ /\d/g;
print $c;В результате будет напечатано число шесть.
Как это работает и почему нельзя
Сначала отвечу на первую часть.
Самое правое выражение в рассматриваемой строчке — регулярное выражение, которое ищет одну цифру, оператором «=~» мы применяем его к конкретной переменной, а ключ «g» в конце регулярки говорит, что искать надо все вхождения.
В Перле есть понятие скалярного и списочного контекста. Результат может сильно отличаться в зависимости от того ожидается ли
Например, если я попробую напрямую присвоить результат выполнения регулярного выражения на переменной „s“ в скалярную переменную (начинается с доллара), то я получу флаг, показывающий встретились ли вообще цифры в рассматриваемой переменной. Если же присвоить тот же результат массиву (имя переменной начинается с «@»), то я получу массив совпадений.
С goatse operator происходит следующее.
На деле «() =
Получается «SCALAR = LIST0 = LISTREGEXP», что возвращает нам количество элементов массива LISTREGEXP при любом не константном LIST0. Двумя присваиваниями, идущими подряд, вряд ли
Теперь ответ на второй вопрос. Нельзя ли
my $s = "Hello, world! This is a Perl! 123456";
my @c =$s =~ /\d/g;
print scalar @c; # массив в скалярном контексте вернёт количество элементовНо это скучно.
Комментарии 25
в регэкспе съелась обратная черта, скрипт в таком виде печатает «1», число букв «d».
Спасибо! Сейчас поправлю.
Рассматривать это как рекомендацию воспользоваться яндексом? LOL
В данном случае лучше вообще ничем.
Я не нашёл хорошего.
Комментарий для Евгения Степанищева:
Судя по change log нифига не умирает. Простоиз-за отсутствия спроса в enterprise секторе язык полностью перешел в гиковскую среду.
Кстати, он никогда не перетендовал на лавры general programming языка, просто в одно время для разработки под веб ему не было достойной альтернативы.
Changelog — это разве показатель? Интересна используемость.
Perl5, который был интересен, появился в 1994. Python — 1990, Ruby — 1995, Lua — 1993, Java — 1995 и так далее.
Комментарий для Евгения Степанищева:
Используется, просто об этом не кричат на каждом углу восторженные мальчишки, серьёзные дядьки пишут серьёзные проекты. С другой стороны с молодняком проблемы, но в последнее время сообщество стало прикладывать больше усилий для привлечения молодёжи.
Комментарий для Евгения Степанищева:
веб-фреймворках Dancer, Mojolicious? Появились совсем недавно и набирают обороты по популярности.
Трудно назвать назвать умирающим проект, который каждый месяц выпускает новые релизы для разработчиков и каждый год — новый стабильный релиз.
Цитата из анонса 5.14.0:
«Perl 5.14.0 represents one year of development since Perl 5.12.0 and
contains nearly 550,000 lines of changes across nearly 3,000 files from
150 authors and committers.»
Вы слышали о
вот только и остаётся съехать на такие обвинения, т.к. никаких других доводов нет
Умирает в плане использования, я это имел ввиду.
Доводов к чему? Я вас не понял.
Вы случаем не журналистом работаете? Какой опыт в вырывании фразы из контекста…
Вероятно, о состоянии проекта perl вы судите по политике Яндекса. Начальство решило «тонну кода, написанного на Perl»
«портировать на новую технологию».
Но может быть, дело не в том, что технология морально устарела, а в том, что скрипт, формирующий выдачу Яндекса, был написан в прошлом веке? Или у вас в компании нет толковых программистов на perl. Решили портировать — портируйте. Но!
С объявления вакансий на создание новой архитектуры SERP Яндекса прошло уже 5 месяцев.
А движения нет. Все тот же старый серп.
Почему вы пытаетесь за него вступиться? Выстатью-то мою читали?
Вы слабо себе представляете как устроен Яндекс. И, конечно же, я сужу не только по Яндексу. Мои социальные связи распространяются далеко за эту компанию. У Перла, как у языка, другая ниша совершенно. Это очень узкая ниша, его былая популярность — недоразумение.
Это не связанные слова. Выдача Яндекса не имеет отношения к Перлу.
Что это показывает, не могу понять? Значит туда нужно много программистов, а не один. Например, у меня во внутренние сервисы вакансия уже 1,5 года висит. А пришла по ней куча народу.
Вам его просто не видно. Мне — видно.
как-то рассуждаете, ей-богу. И не надо от меня Перл защищать. Вы хотя бы первый абзац прочитайте.
Странно вы
Комментарий для Евгения Степанищева:
Не так важно, кто когда появился. Важно кто когда пригодился. Популярность Ruby появилась только в 2005 с запуском RoR.
Комментарий для blog.chaotics.org:
Я хочу сказать, что былая популярность Перла не обусловлена тем, что в том время ничего больше не было. Было. Причины популярности другие. Перл был общесистемным языком, типа Баша. Когда возникла необходимость программировать динамику, все брали Перл, потому что его знало тогда больше народу. Дальше синергия, чем больше народу знало язык, тем больше хотело знать. Перл стал отраслевым стандартом.
Комментарий для Евгения Степанищева:
Я не пытаюсь, а делаю — высказываю свое мнение по паре тезисов вашей статьи. Это запрещено? Вопрос риторический — из той же серии, что и «Выстатью-то мою читали?» Тезисы, с которыми я не согласен
Ваше восхищение языкомкак-то плохо вяжется с наречием степени «немного».
это слова вашего сотрудника Anatolix, подискутируйте с ним на эту тему.
Вы имеет в виду — «убрали иконки», «задвинули автосалоны»? Тогда да, изменения есть. Ноархитектура-то не изменилась. :-)
Сделайте запрос в Яндексе, посмотрите исходный код страницы, а потом сделайте тоже самое в гугле. Сравните.
Объясняю популярно. Это значит, что Яндекс хочет, но не может.
А причем здесь устройство Яндекса? Что непонятного в задаче «тонну кода, написанного на Perl» «портировать на новую технологию»? Обратите внимание, это цитаты вашего сотрудника.
Комментарий для openid.yandex.ru/nextstation/:
Запрещено менять контекст сказанного, это вносит искажения. В данном случае, вы их внесли.
Там прошедшее время, вы заметили?
Нет, я другое имею ввиду.
Вы не правы. Перечитайте ещё раз пример с вакансией на внутренние сервисы.
Устройство «Яндекса» относилось к вашей конкретной фразе про начальство.
Покажите, где я это сделал.
А вы заметили вот это:
Прочитайте уж весь пост вашего коллеги (как я ваш)
Архитектурные изменения?
В чем именно? В том, что Яндекс хочет, прав — «хотим ее поменять» — слова Anatolix.поживем-увидим.
В том что не может —
Комментарий для openid.yandex.ru/nextstation/:
Каюсь, перепутал вас с другим комментатором.
Дайте ссылку.
Да, их.
Мне изнутри «Яндекса» видно, что процессы, которые, по вашим словам, не происходят, идут.