Несколько секретных слов
Модифицируем нашу программу так, чтобы она воспринимала несколько секретных слов. Будем хранить все секретные слова в массиве . Каждый элемент массива - это отдельная скалярная переменная, которой можно присваивать значения и затем использовать ее независимо от других. Можно также одним махом присвоить значение всему массиву. Сделаем это так, чтобы массив @words содержал три возможных пароля:@words = ("camel", "llama" ,"alpaca");
Имена переменных-массивов начинаются с символа @ , что позволяет отличать их от имен скалярных переменных. Существует еще один способ записи этой конструкции так, чтобы не нужно было ставить все эти кавычки - с помошью операции qw() :
@words = qw(camel llama alpaca);
Это абсолютно то же самое, операция qw() работает так, как будто мы вписали в кавычки каждую из трех строк.
Присвоив значения элементам массива, мы можем обращаться к каждому из них по индексной ссылке. Так, $words[0] - это camel , а $words[0] - это alpaca . Индекс может быть и выражением, поэтому если мы присвоим $i значение 2 , то элементом $words[$i] будет alpaca . Вернемся к программе:
#!/usr/bin/perl w
@words = qw(camel llama alpaca);
print "Как Вас зовут? ";
$name = <STDIN>;
chomp($name);
if ($name eq "Alex") {
print "Привет, Alex! Рад тебя видеть!\n";
} else {
print "Привет, $name!\n"; # обычное приветствие
print "Секретное слово? ";
$guess = <STDIN>;
chomp($guess);
$i = 0; #сначала попрубуем это слово
$correct = "maybe"; #догадка верна или нет?
while ($correct eq "maybe") { #продолжаем проверку
if ($words[$i] eq $guess) { #верно?
$correct = "yes"; #да
} elsif ($i < 2) { #смотреть еще слова?
$i = $i + 1; #в следующй раз смотреть следующее слово
} else { #больше нет слов, должно быть, неверно
print "Неверно, попробуйте еще раз. Секретное слово?";
$guess = <STDIN>;
chomp($guess);
$i = 0; # вновь начать проверку с первого слова
}
} #конец цикла для неверных слов
print "Угадали!\n";
}Заметьте, что мы используем скалярную перменную $correct для того, чтобы показать, все еще ищем правильный пароль или уже нашли его.
В этой программе показан также блок elsif оператора if-then-else . В Perl нет эквивалента оператару switch языка С или оператору case языка Паскаль, поэтому для Perl сравнение набора условий выполняется в каскадной цепочке if-elsif-elsif-elsif-else .
<< Предыдущая страница Содержание Наверх Следующая страница >>
2000,
"Язык Perl. Создание CGI-скриптов на Perl."
. Использованы материалы книг:
Маслов
В.В.
Основы программирования на языке Perl
- М.: Радио и связь, Горячая линия - Телеком. 1999. - 144 c.: - ISBN
5-256-01356-4; Рэндал Шварц, Том Кристиансен
Изучаем Perl
: Пер. с англ. - К.:
Издательская группа BHV, 1998 - 320 c.: - ISBN 5-7315-0031-2.
Все пожелания - авторам:
Алексею Машьянову
,
Александру Яковлеву
.