Сегодня читал о Perl. Завтра напишу более качественный Perl-код.

Вчера я прочитал ответ Рэндала Л. Шварца « Perl 6 уже имеет все это » на Десять интересных функций из различных современных языков Каспера Пойлена.

Ага, подумал я: «Perl 6 все еще остается патологически эклектичной синтаксической ловушкой!»

А затем Сегодня, читая Лучшие практики Perl: стандарты и стили для разработки поддерживаемого кода Дэмиана Конвея, я наткнулся на раздел о регулярных выражениях Perl.

Я программировал регулярные выражения на основе того, что я уже знал, из Grep, проверяя документы perl и онлайн-примеры, чтобы понять синтаксис.

Я что-то упустил.

Например, пару месяцев назад мне нужно было сопоставить более 10 разновидностей дат авторского права. В этом беспорядке я хотел сопоставить группу фраз, которые могли бы находиться между словом [Cc] opyright и годом. Такие вещи, как «(c)» и «by». Но я не хотел, чтобы группа «захватывала» содержимое для последующей вставки в вывод.

Я закодировал проблему.

Я должен был заглянуть в документацию.

Пример кода:

(\([Cc]\)|[Bb]y)

Лучший пример кода - (?: преобразует группу в группу без захвата!

(?:\([Cc]\)|[Bb]y)

Так что, возможно, весь этот дополнительный доступный синтаксис сработает на меня, а не против меня. И Завтра я напишу более качественный код на Perl.

Вот рабочий код, в котором используется модификатор «x», чтобы указать Perl игнорировать обычные пробелы в регулярном выражении. Да, я использовал s{}{} вместо s///:

use strict;
use warnings;
my $in = 'Copyright by bop 2018';
$in =~ s{
    [Cc]opyright
    \s+
    (?:\([Cc]\)|[Bb]y)
    \s+
    bop
    \s+
    (\d+)
    }
    {Copyright $1}x;
print "\n$in\n\n";

Вот две книги о Perl, которые я купил в этом году. Ссылки на Amazon Canada - просто измените .ca на .com, .co.uk или что-то еще, и они, скорее всего, будут работать.

Лучшие практики Perl: стандарты и стили для разработки поддерживаемого кода
Конвей, Дамиан

Perl Medic: преобразование устаревшего кода
Скотт, Питер

Perl Best Practices состоит из множества частей, применимых к большинству языков программирования.

Например, каковы хорошие варианты согласованных имен переменных, функций, имен модулей во всей базе кода и зачем вам прилагать усилия?
Дамиан объясняет!

Perl Medic более специфичен для Perl, с множеством синтаксических плюсов и архитектурным золотом.

И да, я еще не закончил первое чтение ни того, ни другого. С нетерпением жду этого второго чтения и новых заметок!

Напишите в комментариях, какие книги по программированию вы читаете!

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .