Почему я до сих пользуюсь 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 типа можно заработать 😃