Введение в Perl - [3]

Шрифт
Интервал

-x директория

Режим запуска скрипта вставленного в файл содержащий обычный текст. Началом скрипта считаестся строка с символами '#!' в начале и содержащия слово perl. Концом – строка с '__END__'

Указанная директория становится текущей в момент исполнения. Если необходимо читать последующие строки то это лучше делать через указатель файла DATA.

Синтаксис

Перл программа (скрипт) состоит из последовательности деклараций и предложений.

Единственно что должно быть обязательно декларировано это форматы отчетов и подпрограммы (функции). Все не объявленные переменные, массивы, имеют значение 0 или null.

Декларации (объявления).

Перл имеет свободный формат. Комментарии начинаются с символа '#' и продолжаются до конца строки.

Декларации могут использоваться в любом месте программы так же как и предложения (statements) но действуют они только в фазе компиляции программы. Обычно их помещают или в начале или в конце программы.

Декларация подпрограмм позволяет использовать имя подпрограммы как списковый оператор начиная с момента декларирования.

Пример:

sub test; # Декларация подпрограммы test

$var1 = test $0; # Использование как оператора списка.

Декларации подпрограмм могут быть загружены из отдельного файла предложением require или загружено и импортировано в текущую область имен предложением use. Подробно см. главу Модули.

Простое предложение.

Простое предложение обязательно заканчивается символом ';' если только это не последнее предложение в блоке где ';' можно опустить. Заметьте что существуют операторы такие как eval{} и do{} которые выглядят как сложные предложения но на самом деле это термы и требуют обязательного указания конца предложения.

Любое простое предложение может содержать single модификатор перед ';'. Существуют следующие single модификаторы:

if EXPR

unless EXPR

while EXPR

until EXPR

где EXPR – выражение возвращающее логическое значение true или false.

Модификаторы while и until вычисляются в начале предложения кроме блока do который выполняется первым.

if EXPR– Модификатор «если». Предложение выполняется если EXPR возвращает true.

Пример:

$var = 1;

$var2 = 3 if $var > 0; # Результат: $var2 = 3

while EXPR – Модификатор «пока». Предложение выполняется столько раз покаEXPR = true

Пример:

$var = 1;

print $var++ while $var < 5; # Печать $var с инкрементом

Результат: 1234


until EXPR – Модификатор "до ". Предложение выполняется до тех пор пока EXPR = false

Пример:

$var = 1;

print $var++ until $var > 5; # Печать $var с инкрементом

Результат: 12345

unless EXPR – Модификатор «если не» . Обратный к if. Выражение выполняется есле EXPR = false.

Пример:

$var = 1;

print $var++ unless $var > 5; # Печать $var с инкрементом

Результат: 1


Сложные предложения.

Последовательность простых предложений ограниченная функциональными ограничителями называется блоком. В Перл это может быть целый файл, последовательность предложений в операторе eval{} или чаще всего это множество простых предложений ограниченных круглыми скобками '{}'.

Сужествуют следующие виды сложных предложений:

if (EXPR) BLOCK

if (EXPR) BLOCK else BLOCK

if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK

LABEL while (EXPR) BLOCK

LABEL while (EXPR) BLOCK continue BLOCK

LABEL for (EXPR; EXPR; EXPR) BLOCK

LABEL foreach VAR (LIST) BLOCK

LABEL BLOCK continue BLOCK

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

if (EXPR) BLOCK – Вычисляется логическое выражение EXPR и если true блок выполняется.

Пример:

$var =1;

if ($var == 1)

{ print $var,"\n";

}

Результат: 1


if (EXPR) BLOCKelseBLOCK2 – Если EXPR=true выполняется BLOCK иначе BLOCK2.

Пример:

$var =2;

if ($var == 1)

{ print «\$var = 1\n»;

}

else

{ print «\$var не равно 1\n»;

}

Результат: $var не равно 1

if (EXPR1) BLOCK1 elsif (EXPR2) BLOCK2 ... else BLOCK – Если EXPR1=true выполняется BLOCK1 иначе если EXPR2=true выполняется BLOCK2 иначе ... иначе BLOCK.

Пример:

$var = 1;

if ($var == 0)

{ print «\$var = 0\n»;

}

elsif ($var == 1)

{ print «\$var = 1\n»;

}

else

{ print «Не известное \$var\n»;

}

Результат: $var = 1

Цикл while выполняет BLOCK до тех пор пока EXPR = true. Метка LABEL не обязательна и состоит из идентификатора завершающегося символом ':'. Метка необходима при использовании внутри блока цикла управляющих операторов next, last и redo. Если метка все же отсутсвует то эти операторы ссылаются к началу ближайшего цикла.

Блок после continue выполняется всегда перед тем как вычисляется логическое выражение EXPR. Это подобно EXPR3 в предлжении for поэтому в этом блоке удобно изменять счетчики и флаги цикла даже если применяестя оператор next.


Операторы управления циклом.

next – подобен continue в С. Переходит к началу текущего цикла т.е. повторяет итерацию.

Пример:

M1:

while ($i < 6)

{

++$i; # Увеличиваем счетчик на 1

next M1 if $i < 3; # Переходим в начало если $i < 3

++$i; # иначе увеличиваем счетчик еще раз на 1

}

continue

{

print "$i "; # Печатаем $i

}

Результат: 1 2 4 6

last – подобен оператору break в языке С. Немедленно прерывает цикл. Блок continue пропускается.

Пример:


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.