Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
perl.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
388.1 Кб
Скачать

Условные операторы

Многие предыдущие примеры использовали оператор 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 и окончания выполнения цикла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]