Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в Веб программирование.doc
Скачиваний:
81
Добавлен:
07.11.2018
Размер:
4.42 Mб
Скачать

Операторы

В языке Perl используются операторы, аналогичные используемым в C++. Например условные операторы имеют вид:

if (EXPR) {BLOCK}

if (EXPR){ BLOCK} else{ BLOCK}

if (EXPR) BLOCK elsif (EXPR) {BLOCK} else {BLOCK}

#Пример

$var = 1;

if ($var == 0)

{ print "\$var = 0\n"; }

elsif ($var == 1)

{ print "\$var = 1\n"; }

else

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

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

В Perl используются следующие операторы циклов:

LABEL while (EXPR){ BLOCK}

LABEL while (EXPR) {BLOCK} continue{ BLOCK}

LABEL for (EXPR; EXPR; EXPR) {BLOCK}

LABEL foreach VAR (LIST) {BLOCK}

Цикл while выполняет BLOCK до тех пор пока EXPR = true. Блок после continue выполняется всегда перед вычислением выражения EXPR. Метка LABEL используется, чтобы пометить цикл, который надо прервать, и необходима при использовании внутри блока операторов next, last и redo. Если метка отсутствует, то эти операторы ссылаются на начало ближайшего цикла. Оператор 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 в языке Си немедленно прерывает цикл. Оператор redo предписывает начать новый цикл не вычисляя EXPR и не выполняя блок continue.

Пример:

M1:

while ($i < 6)

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

redo M1 if $i == 3; # Далее пропустить для $i = 3

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

}

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

}

Результат: 2 5 7

Оператор for полностью аналогичен оператору for в Си.

Цикл foreach имеет вид: LABEL foreach VAR (LIST) {BLOCK}

Переменной VAR присваивается поочередно каждый элемент списка LIST и выполняется блок. Вместо слова foreach можно писать просто for - это слова синонимы.

Пример:

@месяц = ("январь","февраль","март"); # Создали массив

foreach $i (@месяц)

{ print $i," "; # Печать $i

}

for $i (3,5,7)

{ print "$i "; }

Результат: январь февраль март

3 5 7

В Perl существует оператор goto.

Рассмотрим пример небольшой программы:

#!/usr/local/bin/perl

@passwords = qw (inet basic net);

print ”Enter the login: ”;

$login = <STDIN>;

chomp ($login);

if ($login eq ”Root”) {

print ”Hello, Administrator! Glad to see you again!\n ”;}

else { print ”Enter password: ”;

$pass = <STDIN>;

chomp ($pass);

$i = 0; $flag = ”no”;

while ($flag eq ”no”) {

if ($passwords[$i] eq $pass) {$flag = ”yes”;}

elseif ($i <2) {$i = $i + 1;}

else {print ”Incorrect password for $login, try again.\n”;

print ”Enter password: ”;

$pass = <STDIN>;

chomp ($pass);

$i = 0; }

}

}

В рассматриваемом случае массив @passwords включает три элемента: inet, basic, net. Команда qw(), заключающая их в скобки, освобождает от ввода кавычек, необходимого при использовании общепринятой конструкции вида @passwords = (”inet”, ”basic”, ”net”); Оператор print служит для вывода на экран символьной информации print ”Enter the login: ”.

Затем располагается оператор ввода строки с терминала, выполняющегося в Perl с помощью конструкции <STDIN>. Переменная $login содержит и завершающий символ строки, например, Root будет введено как Root\n. Чтобы убрать лишний символ, требуется функция chomp, которая в качестве своего единственного параметра принимает скалярную переменную и удаляет из нее завершающий символ перехода на новую строку, если этот символ там присутствует: chomp ($login);

Наличие значения переменной $pass среди элементов массива @passwords проверяет $passwords[$i] eq $pass. Следующая ниже операция сложения $i = $i + 1; увеличивает текущее значение счетчика.