Простые и составные операторы — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Простые и составные операторы

2022-12-30 18
Простые и составные операторы 0.00 из 5.00 0 оценок
Заказать работу

Простым выражением называется любая допустимая комбинацияоператоров и операндов. В языке Perl оператором является выражение, заканчивающееся точкой с запятой. Как и в языке программирования С, все операторы оканчиваются точкой с запятой. Когда вывводите текст программы в отладчик, можно опускать точку с запятой, поскольку отладчик поставит ее за вас. Следующий текст иллюстрирует простой оператор присваивания на языке Perl:

  $Title = 'Web Programming';

Так же как и при программировании на С, скрипты Perl могутсодержать блоки операторов, или составные операторы, которые помещаются в фигурные скобки ({}), как показано ниже:

  {      # Операторы      # Другой блок операторов  }

Ваши скрипты будут широко использовать блоки инструкций наряду с более сложными операторами. Как и в языке С, скрипты наязыке Perl могут использовать блоки инструкций для определенияобласти видимости (scope) локальных переменных. Однако определение локальных переменных в блоке не является автоматическим. Дляих декларации скрипт должен использовать ключевое слово local.Далее в этой главе мы рассмотрим область видимости переменных вдеталях.

УСЛОВНЫЕ ОПЕРАТОРЫ

Многие предыдущие примеры использовали оператор if. В языкеPerl оператор if почти что идентичен оператору if в языке С.Отличие, однако, состоит в том, что в языке С оператор if можетиспользовать простую инструкцию без фигурных скобок, тогда как вязыке Perl инструкции обязательно должны быть заключены в фигурные скобки, образуя блок.

if (expr)  statement;      // приемлемо для C но не для Perl if (expr)  {      statement; # вот так нужно делать в Perl  }

Аналогичным образом инструкции языка Perl else работает немного отлично от соответствующей инструкции в С. В языке Perl инструкции также должны быть заключены в фигурные скобки и образовать блок:

// Пример в С неприемлемо в Perl if (expr1)  statament1; else if (expr2)  statement2; else  ststement3;

Ниже показано, что Perl позволяет использовать конструкциюelsif:

if (expr1) {  statament1; } elsif (expr2) {  statement2; } else {  ststement3; }

ОПЕРАТОР UNLESS

В языке программирования С программисты используют логическое отрицание (!) для изменения булевой величины на противоположное, как показано ниже:

if (!(expr)) // Отрицание на С {  statement; }

Наряду с использованием логического отрицания, скрипты Perlчасто содержат оператор unless, который обеспечивает то же самое,что и записанный выше код на С.

unless (expr) {  statement; }

Примечание: В отличие от языка С, Perl не содержит оператора переключения switch.

ОПЕРАТОР DO

Одним из частных случаев блочных операторов служит операторdo, который позволяет блоку инструкций возвращать значения. Значением, которое оператор do возвращает, является значение последнего выражения, оцененного в рамках блока. Например, следующийоператор do сравнивает строковую переменную $Month с месяцами года и присваивает переменной $DayCount значение, равное числу днейв месяце:

$DayCount = do { if ($Month eq 'September' || $Month eq 'April' || $Month eq 'June' || $Month eq 'November') {  30; } elsif ($Month eq 'Februry') {  $Year & 3? 28: 29; # Проверка на весокосный год } else {  31; }    };

Обратите внимание, что Perl требует наличия точки с запятойв конце блока do. Не путайте блок do с оператором do while, который будет рассматриваться ниже в этой главе.

ЦИКЛЫ И ВЕТВЛЕНИЯ

Perl поддерживает операторы циклов for, while и do с небольшими отличиями от их реализации в языке С. Существенным отличием служит то, что Perl требует использования инструкций блоками, заключенными в фигурные скобки. Кроме того, как вы познакомитесь, далее, Perl расширяет конструкцию цикла, что6ы обеспечитьее некоторые новые формы. В следующих примерах циклы for, while иdo работают аналогичным образом на языках С и Perl:

for($i = 0; $i< 100;$i++) { printf("%d\n", $i);   } while ($i > 0) {  printf("%d\n", $i-); } do { printf("%d\n", $i++); } while ($i < 0);

Конструкция циклов на языке С отлична от конструкции на языке Perl еще и в том, что Perl не содержит оператора break, а оператор continue выполняет совершенно иную функцию. К счастью, Perlобеспечивает некоторые новые, более гибкие и более интуитивно понятные конструкции:

? last выход из цикла (как оператор С break)? next начать новую итерацию (как оператор С continue)? redo повторить текущую итерацию

Для понимания конструкций циклов на языке Perl, необходимо разобраться с использованием блока continue. Рассмотрим следующий цикл while, который содержит блок continue:

$i = 100; while ($i > 0) { print $i; } continue {$i-}

Вы можете представлять себе блок continue как третье выражение в цикле for, которое выполняется на каждой итерации. Аналогичным образом Perl выполняет блок continue в конце каждой итерации. Однако, как вы узнаете далее, блок continue обеспечиваетскрипту более полный контроль над процессом, чем обеспечиваетцикл for. Когда цикл на языке Perl использует оператор next, блокcontinue все равно выполняется, если только он существует. Однако если цикл использует оператор redo, блок continue не исполняется.

МЕТКИ

В скрипте Perl метки просто означают имя, соответствующеенекоему положению внутри скрипта. Имена меток оканчиваются двоеточием (например, outerloop:). Используя оператор goto, скриптможет осуществлять переходы на метку. Дополнительно могут использоваться операторы last, next и redo, для перехода к метке.Следующий код иллюстрирует использование оператора last для перехода на метку:

outerloop: while ($i > 0)     {     while ($j > 0)      {             #Здесь какой-нибудь другой процесс             if ($needToAboutLoop)             {                 last outerloop;             }      }  }

В этом случае инструкция содержит ветвь last для перехода наметку outerloop и окончания выполнения цикла.

ЦИКЛ UNTIL

Еще одной конструкцией цикла в языке Perl является циклuntil, который является противоположностью циклу while. Как выпомните, в цикле while инструкции выполняются до тех пор, покавыполняется заданное условие. В цикле until, напротив, инструкции выполняются до тех пор, пока не будет выполнено условие. Например, рассмотрим цикл while, такой, как показан на следующейстранице.

while (!(expr))      {             statement;      }

Используя цикл until, можно создать идентичный цикл, показанный ниже:

  until (expr)  {      statement;  }

Аналогичным образом следующая конструкция do while использует оператор логического отрицания для того, чтобы выполнять цикл, пока заданное булево выражение не станет истинным:

do {  statement; } while (!(expr));

Используя конструкцию do until, вы можете сформировать идентичный цикл без использования логического отрицания:

do {  statement; } until (expr);

ЦИКЛЫ FOR И FOREACH

Perl поддерживает цикл for совершенно аналогично языку С:

for (statement1; expression; statement2) {  statement3; }

Например, следующий код использует цикл for для того, чтобывывести значения чисел от 0 до 100:

for ($digit = 0; $digit <=100; $digit++) {  print $digit, ' '; }

Дополнительно Perl содержит конструкцию цикла foreach, который позволяет скрипту организовывать итерации в списках и массивах. Рассмотрим пример:

@list = ('a','b','c'); foreach $arg (@list) {  print "List item: $arg\n"; } foreach $i (1..10) {  print "iteration $i\n" }

В первом случае цикл foreach осуществлял перебор значений всписочной переменной @list. Во втором примере в цикле foreachосуществляется перебор чисел в диапазоне от 1 до 10. Внутри цикла foreach может фигурировать список, состоящий излитералов, или массив, как было проиллюстрировано в предыдущемпримере. После выполнения одной итерации циклом, специальная скалярная переменная {$arg в первом случае и $i во втором случае)принимает значение из заданного списка элементов. Область видимости этой скалярной переменной в цикле foreach ограничиваетсятелом цикла. Поэтому скалярная переменная цикла, foreach не будет конфликтовать с идентичным именем переменной, определеннойвне цикла. В следующем коде переменная с именем $i используетсявнутри и вне цикла foreach:

  $i = 1001;  foreach $i (1..9)    {      print "$i\n";   # цикл выведет 123456789    }  print "$i\n";

Как можно увидеть из этого примера, переменная $i, используемая для организации итераций цикла, не конфликтует с переменной $i, определенной вне цикла. Особенностью цикла, foreach, которую ваши скрипты могут использовать, является возможность модификации элементов массива.(Будьте осторожны при реализации этой возможности!) Рассмотримследующий цикл foreach, который добавляет значение 10 каждомуэлементу массива:

@list = 1..5; foreach $i (@list) {  $i += 10; } $, = ' '; print @list; # выведет 11 12 13 14 15

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


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

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

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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.014 с.