stones.gif (8081 байт)

Несколько секретных слов

Модифицируем нашу программу так, чтобы она воспринимала несколько секретных слов. Будем хранить все секретные слова в массиве . Каждый элемент массива - это отдельная скалярная переменная, которой можно присваивать значения и затем использовать ее независимо от других. Можно также одним махом присвоить значение всему массиву. Сделаем это так, чтобы массив @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 .

<< Предыдущая страница Содержание Наверх Следующая страница >>

stones.gif (8081 байт)
2000, "Язык Perl. Создание CGI-скриптов на Perl." . Использованы материалы книг: Маслов В.В. Основы программирования на языке Perl - М.: Радио и связь, Горячая линия - Телеком. 1999. - 144 c.: - ISBN 5-256-01356-4; Рэндал Шварц, Том Кристиансен Изучаем Perl : Пер. с англ. - К.: Издательская группа BHV, 1998 - 320 c.: - ISBN 5-7315-0031-2.
Все пожелания - авторам: Алексею Машьянову , Александру Яковлеву .