Почему я до сих пользуюсь Perl? Потому что заменить эту швейцарскую армейскую бензопилу нечем.
Возьмём задачу. Есть вот такой YAML. Мне надо взять из каждого блока name
и title
(те блоки, в которых нет name
или title
- пропускать). В name
заменить все точки на подчёркивания и заключить в кавычки. title
тоже заключить в кавычки, если нужно. И сделать из этого кусок JSON в стиле
<name>: <title>,
Делается это таким вот скриптом:
$name = '';
while (<>) {
$name = $1 if /^- name: (.*)$/;
if (/^\s*title: (.*)$/) {
next if $name eq '';
$name =~ tr/./_/;
$title = $1;
$title = "\"$title\"" unless $title =~ /^"/;
print "\"$name\": $title,\n";
$name = '';
}
}
Написано в vi
за минуту.
Попробовали бы они такое в Питоне.
Comments (11)
За минуту перевел на питон
Чуть красивше с форматными строками (не привык пока к ним)
Пропущена замена символов в
name
. И<>
- это не только stdin 😉Но лучше, чем я ожидал, если с форматными строками. Хотя всё равно длинно.
Интересно, найдется ли тут знающий awk, который утрёт нам тут всем нос? 😉
Есть у меня знакомый любитель J. Хотя, конечно, для парсинга текстов он не очень подходит
Вот за это перл и не любят (когда не любят). Была задача собрать ключи из элементов yaml в один объект json, начинаете вы думать на perl, и во что она превращается? Ехала кавычка через бэкслеш погоняя регэкспом! А потом окажется, что под name: на верхем уровне могут быть ещё подобъекты с title внутри, и этот title нам не нужен -- и перловое решение неожиданно сломается (и так 15 раз).
Ну да, по-человечески должно быть
import yaml,json
и вперёдПонятное дело, будь у меня задача сделать что-то универсальное, не на один раз, я бы Perl не брал и разбирал по-человечески.
Что ты такое??
Ну вот выше вполне себе питонячее решение.
Как по мне, питон может и длиннее, но всяко читабельнее перловки.
Я уже бросил. На питоне не сильно длиннее, но все эти переменные по умолчанию и
<>
начали меня раздражать. С таким количеством синтаксического сахара и диабет II типа можно заработать 😃