Perl, Переменные и массивы, строковые литералы.

Язык Perl, созданный Ларри Уоллом (Larry Wall), был первым из самых популярных языков написания сценариев. Он предлагает чрезвычайно больше возможностей, чем bash, а написанные на нем программы (если они написаны хорошо) довольно просты для понимания. Поскольку в языке Perl не предусмотрена обязательность соблюдения разработчиками стилистических правил создания кода, читабельность Perl-кода зависит от их дисциплинированности. Не без основания Perl называют языком "только для записи".

Здесь описывается версия Perl 5, которая была стандартом в течение последнего десятилетия. Версия Perl 6 все еще находится в стадии разработки. Подробнее можно узнать на сайте peri6.org. Языки Perl и Python больше подходят для работы в области системного администрирования, чем такие традиционные языки программирования, как С, C++, C# и Java. Их отличает большая эффективность: при лаконичности кода и менее мучительном процессе отладки, а также без компиляционной "волокиты" они могут продемонстрировать большие возможности.

Выбор языка обычно зависит от личных предпочтений или стандартов, используемых вашим работодателем. Как Perl, так и Python предлагают библиотеки модулей и языковые расширения. По популярности язык Perl "старше", чем Python, поэтому его предложения "вылились" в довольно длинный список возможностей. Но при решении каждодневных задач системного администрирования библиотеки поддержки обоих языков практически эквивалентны.

Для языка Perl характерен следующий девиз: "Достичь цель можно несколькими путями". Поэтому имейте в виду, что в большинстве примеров, описанных в этом разделе, существуют и другие (помимо приведенного здесь) способы выполнения поставленной задачи.

Операторы Perl разделяются точкой с запятой.1 Комментарии начинаются знаком # и продолжаются до конца строки. Блоки операторов заключаются в фигурные скобки. Вот пример простой программы "Привет, мир!".

#!/usr/bin/perl

print "Привет, мир!\n";

Как и для bash-программ, вы должны либо изменить права доступа (chmod +х) для исполняемого файла, либо непосредственно вызвать Рег1-интерпретатор.

$ chmod +х helloworld

$  ./helloworld

Привет, мир!

Строки в Рег1-сценарии не являются командами оболочки (они представляют собой Perl-код). В отличие от командной оболочки bash, которая позволяет объединить некоторую последовательность команд в сценарий, Perl не "видит дальше своего носа", если ему не дать соответствующего указания. Тем не менее Perl обеспечивает действие многих таких же соглашений, которые действуют в оболочке bash, например использование обратных апострофов, заключающих в себя некоторую команду, для перехвата результата выполнения этой команды.

 

Переменные и массивы

В Perl используются три базовых типа данных: скаляры (т.е. такие унитарные значения, как числа и строки), массивы и хеши (известные также как ассоциативные массивы). Тип переменной всегда очевиден, поскольку он "встроен" в имя переменной: скалярные переменные начинаются знаком "$", переменные массивов — символом "@" и хеш-переменные — знаком "%".

В Perl понятия "список" и "массив" часто взаимозаменяемы, но, пожалуй, корректнее сказать, что список — это некоторая последовательность значений, а массив — это переменная, которая может содержать такой список. Отдельные элементы массива являются скалярами, поэтому, подобно обычным скалярным переменным, их имена начинаются со знака "$". Индексация массивов начинается с нуля, а индекс самого последнего элемента в массиве @а определяется значением $#а. Чтобы получить размер массива, достаточно добавить к этому значению единицу.

Массив @ARGV содержит аргументы командной строки сценария. Его можно использовать подобно любому другому массиву.

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

 #!/usr/bin/perl

@items = ("носки", "туфли", "шорты");

printf "Есть %d вида одежды.\n", $#items + 1;

print "Наденьте ${items[2]} первыми, затем ", join(" и ", @iterms[0,1]), ".\n";

Результат выполнения этого сценария таков.

$ peri clothes

Есть 3 вида одежды.

Наденьте шорты первыми, затем носки и туфли.

В этих нескольких строках сценария есть много интересного. Рискуя отвлечь ваше внимание, мы все же включаем в каждый наш Рег1-пример несколько распространенных идиом, разъясняя сложные моменты в тексте, следующем за примером. Если вы внимательно прочитаете все пояснения к примерам (не пугайтесь, они короткие!), то к концу этой главы приобретете практические знания в использовании большинства распространенных Perl-конструкций.

 

Массив и строковые литералы

В этом примере обратите внимание, прежде всего, на то, что набор круглых скобок (...) создает список литералов. Отдельными элементами этого списка являются строки (которые разделяются запятыми). Созданный список присваивается переменной @items.

В языке Perl нет жесткого требования заключать все строки в кавычки. В конкретном случае начальное присваивание значения переменной @items с тем же успехом работает и без кавычек.

@items =  (носки,  туфли,  шорты);

Такие строки без кавычек называются в Perl "голыми словами" (barewords), и они интерпретируются таковыми в качестве "последнего средства". Это значит, что, если для некоторого объекта невозможно найти смысловую нагрузку, Perl пытается интерпретировать его как строку. В некоторых случаях это имеет смысл, если сохранится читабельность кода. Однако наш пример не относится к таким случаям. Даже если вы сами предпочитаете всегда заключать строки в кавычки, будьте готовы к тому, что вам придется "разгадывать" намерения других программистов, разбираясь в их "голословном" коде.

В Perl существует еще один способ инициализировать этот массив. Он состоит в использовании оператора qw (quote words — т.е. брать слова в кавычки). Это, по сути, форма заключения строки в кавычки, которая предоставляет вам право самим выбирать разделители (как и во многих других случаях использования кавычек в Perl). Форма

@items = qw (носки туфли шорты);

является самой традиционной, но при этом может ввести в заблуждение, поскольку часть после оператора qw — уже не список. В действительности это строка, разделенная пробельными символами для формирования списка. Версия

@items = qw[носки туфли шорты];

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

 

Комментарии (0)

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