Вспоминается, как в ранней сознательной юности, когда мне нужно было сделать какую-нибудь нехорошую операцию с файлами (ну, например, задать куче файлов имя по первой строке содержимого), я писал для этой цели программу на турбо-паскале (ибо о существовании других языков только смутно подозревал), компилировал её и из-под лютого ДОСа запускал. К моменту уничтожения на физмат-пати моей старой 98-й и, соответственно, возможности без членовредительства сделать что-то из-под лютого ДОСа, я уже разочаровался в этом подходе: всё-таки должен же быть какой-то более элегантный способ быстро и пакетно убить всех зайцев.
Вчера, наконец, дошли руки до такого способа − поставил себе интерпретатор
Perl'а и по второму разу (первый был тоже в детстве, но забылся где-то после «Hello world!» и «99 бутылок пива»
HQ9+) учу собственно язык. И удивляюсь неочевидным, но элегантным решениям.
Покорило, скажем, то, что сортировка списка − это встроенный оператор языка, а никакая не функция. Т. е. вместо ожидаемого и в том же
PHP казавшегося уже достаточно элегантным (простите, в турбо-паскале вообще не пахло никакими ассоциативными массивами!):
sub cmp($a, $b) {
return ($a > $b ? 1 : -1);
}
sort(%array, cmp);
foreach $i (keys %array) {
# ...
}достаточно одной строчки:
foreach $i (sort { $a <=> $b } keys %array) # ...
Много говорят об элегантности
Python'а и неудобочитаемости Perl'а из-за его насыщенности значками, но мне кажется как раз наоборот: с-подобный синтаксис последнего превращает его во что-то почти совсем знакомое.
Кстати, как правильно называть язык Си одной буквой: с или С?