Основы Perl: интенсивный курс для разработчиков CGI

6

Perl — это язык программирования. Он старый. Он уважаем. Он повсюду. Если вы когда-либо видели CGI-скрипт, запускающий базовое веб-приложение конца 90-х, вы видели Perl.

Он хорошо справляется с двумя задачами. Во-первых, он заменяет пакетные файлы DOS и скрипты C shell. Во-вторых, он обеспечивает работу веб-серверов. Именно этот контекст имеет значение сейчас.

Хорошая новость? Исходный код бесплатен. Разработчики отдают его бесплатно. Вы можете скачать тысячи скриптов. Вы можете изучать их. Вы можете ломать их.

Плохая новость? Большая часть этого кода нечитабельна. Perl поощряет такой стиль, который граничит с оверлейностью (затемнением смысла). Если вы не знаете, что делаете, вы не поймете, что читаете.

Это руководство предполагает, что вы уже умеете программировать. Если вы знаете C, вы впереди. Если нет, начните здесь. Мы пропускаем философию. Мы переходим к синтаксису.

Запуск интерпретатора

Вам нужен интерпретатор Perl.

Если вы используете UNIX, он, вероятно, уже установлен. Шанс 99,99%. Проверьте ваш терминал.

Если вы используете Windows или Mac, перейдите на официальный сайт. Скачайте последнюю версию. Установите её. Perl бесплатен. Он имеет открытый исходный код. Он существует с 1987 года. Не усложняйте процесс установки.

После установки найдите каталог DOCS. Он входит в комплект поставки. Просмотрите его. Пока не читайте каждое слово. Оно плотное. Оно сухое. Но оно точное. Оно понадобится вам позже, когда основы перестанут иметь смысл.

Ваш первый скрипт

Настройте путь. Добавьте исполняемый файл Perl. Откройте текстовый редактор. Создайте файл с именем test1.pl.

Напишите это:

Сохраните его. Откройте командную строку. Введите:

Вы увидите «Hello World!» на экране. Это stdout. Это стандартный вывод.

В UNIX вы можете добавить #!/usr/bin/perl в первую строку. Тогда вы сможете просто вводить ./test1.pl. Чистее. Быстрее.

Команда print выводит данные в stdout. \n — это перевод строки. Просто.

Попробуйте это:

Две строки. Одна команда.

Почему это сработало? Из-за двойных кавычек. В Perl двойные кавычки запускают интерпретацию кавычек. Он обрабатывает управляющие последовательности.

Использовать одинарные кавычки?

Теперь вы видите буквальный текст. \n остается как \n. Никакой интерпретации. Никакой магии.

Также существует символ обратной кавычки: `.

Это запускает команду операционной системы. Вывод печатается на экране. В Windows cmd /c необходим. dir не является исполняемым файлом. Это встроенная команда командного интерпретатора.

Если вы попробуете print 'dir'; в Windows NT, это не сработает. Вам нужна оболочка оболочки.

Обратите внимание на символ /. Он используется для регулярных выражений. Вы увидите его повсюду.

print принимает запятые в качестве разделителей:

Он также принимает точки в качестве операторов конкатенации:

Точка соединяет строки. Запятая разделяет аргументы.

Программисты на C понравится printf. Он работает точно так же, как в C.

Переменные и типы данных

Переменные Perl не требуют объявления. Они существуют в тот момент, когда вы им присваиваете значение.

Всегда используйте символ $.

Двойные кавычки интерпретируют управляющие последовательности. Одинарные — нет.

Числа тоже работают.

\t — это табуляция. Perl обрабатывает её.

Конкатенация строк использует точку:

Существует сокращенная запись. .= работает как +=.

Массивы

Массивы начинаются с @.

Массивы имеют нулевую индексацию. Как в C. Как в Java. Как в Python.

Запись $#a дает вам максимальный индекс. Не количество. Индекс. Так что если у вас есть три элемента, $#a равно 2.

Хэши

Хэши начинаются с %. Это пары ключ-значение.

‘bar’ связано с ‘dog’. ‘meow’ с ‘cat’.

Существует более чистый синтаксис. Оператор =>.

Он кавычки левую сторону. Он действует как запятая. Он делает код читаемым. Используйте его.

Perl становится легким, как только вы перестаете бороться с синтаксисом. Основы просты. Продвинутые вещи — вот где становится странно. Держитесь ядра. Освойте переменные. Освойте правила кавычек.

Остальное — это просто шаблоны. И плохие привычки.

Если вы работали с C, синтаксис Perl покажется вам знакомым. Он сильно заимствует из этого языка, но ослабляет строгость требований.

Возьмем цикл for. Он выглядит именно так, как вы ожидаете:

Вы также можете использовать операторы while для более простых итераций. Здесь переменная увеличивается внутри блока:

Логические операторы следуют тем же правилам, что и в C. Используйте && для «и», || для «или» и ! для «не».

Примечание: Perl предлагает второй набор операторов сравнения для строк. В то время как == проверяет численное равенство, eq проверяет равенство строк.

Числовые операторы остаются стандартными:
== (равно)
!= (не равно)
<, <=, >, >=

Но если вы работаете с текстом, вам могут подойти альтернативы на основе слов:
eq (равно)
ne (не равно)
lt (меньше)
le (меньше или равно)
gt (больше)
ge (больше или равно)

Итерация по массивам

Перебор коллекции в Perl чист благодаря foreach. Он присваивает каждый элемент массива скалярной переменной по очереди.

Здесь $b принимает значение ‘dog’, затем ‘cat’, затем ‘eel’. Цикл заканчивается, когда массив @a исчерпан.

Правило фигурных скобок

В Perl есть одно незыблемое правило синтаксиса: фигурные скобки.

Вы должны использовать { и } для оборачивания блоков кода, даже если блок содержит только одну строку.

Пропустите скобки, и компилятор выдаст ошибку.

Написание подпрограмм

Функции в Perl определяются с помощью ключевого слова sub.

При вызове подпрограммы все переданные ей аргументы помещаются в специальный массив @_.

Переменная $#_ возвращает максимальный индекс массива @_. Поскольку массивы имеют нулевую индексацию, это фактически дает количество параметров минус один.

Это немного запутанно, но если привыкнуть, это эффективно.

Области видимости переменных и возвращаемые значения

Чтобы не засорять глобальное пространство имен внутри функции, объявляйте локальные переменные с помощью ключевого слова local.

Вы также можете явно вызывать функцию с помощью символа &.

Технически & требуется только в случае неоднозначности для парсера. Но многие разработчики используют его по привычке для явности.

Чтобы отправить результат обратно вызывающему коду, используйте ключевое слово return.

Ввод и вывод

Чтение из стандартного потока ввода (STDIN ) является простым. Оператор угловых скобок читает данные построчно.

Это предполагает, что ввод является допустимым целым числом. Если пользователь введет мусор, логика нарушится.

Для ввода одного символа используйте getc :

Или используйте функцию read, которая указывает длину вводимых данных для захвата.

Число 1 в конце указывает, что читается только один символ.

Данные окружения и командной строки

Perl предоставляет доступ к системным данным через глобальные переменные.

Хеш %ENV содержит все переменные окружения. Помните, что ключи должны быть в верхнем регистре.

Если вам нужно получить доступ к аргументам командной строки, посмотрите на массив @ARGV.

  • $ARGV[0] — первый аргумент.
  • $ARGV[1] — второй аргумент.
  • $#ARGV дает индекс последнего аргумента (количество минус один).

Это упрощает создание скриптов, принимающих динамические входные данные без жесткого кодирования значений.

Актуален ли Perl сегодня?

Это справедливый вопрос. Используют ли программисты Perl до сих пор? Да.

Используется ли Perl в 2024 году? Да, хотя его роль изменилась. Это высокоуровневый, общего назначения, интерпретируемый, динамический язык. Он не доминирует в новых проектах разработки веб-приложений так, как это делают Python или Node.js.

Однако Perl остается мощным инструментом для системного администрирования и поддержки унаследованного кода. Он отлично справляется с обработкой текста и быстрым написанием скриптов.