stones.gif (8081 байт)

Справедливость для всех

Чтобы быть справедливым по отношению ко всем остальным пользователям, мы должны перед поиском имени в таблице взять первое слово из того, что введено, а затем заменить все его символы символами нижнего регистра.

Сначала – операция подстановки , которая находит регулярное выражение и заменяет его строкой; мы хотим взять содержимое переменной $name , найти первый специальный символ и убрать его и все последующие символы. Это выражение имеет вид /\W.*/ . Здесь \W обозначает спецсимвол (т.е. все кроме буквы, цифры и знака подчеркивания), а .* обозначают любые символы с этого места до конца строки. Чтобы убрать эти символы, нужно взять ту часть строки, которая совпадает с рассматриваемым регулярным выражением, и заменить его пустой строкой:

$name =~ s/\W.*//;

После операции =~ у нас стоит операция подстановки – буква s , за которой следуют заключенные между двумя косыми регулярное выражение и строка (пустая строка между второй и третьей косыми).

Чтобы перевести содержимое переменной $name в нижний регистр, используем операцию tr в такой записи:

$name =~ tr/A-Z/a-z/;

Когда tr находит символ из первого списка ( A-Z ), он заменяется соответствующим символом из второго списка (например: A на а , G на g и т.д.).

Мы получаем:

%words = qw (
   fred camel
   barney llama
   betty alpaca
   wilma alpaca
);
print "Как Вас зовут? ";
$name = <STDIN>;
chomp($name);
$original_name = $name;   #сохранить для приветствия
$name =~ s/\W.*//;   #избавиться от всех символов,
                                 #следующих после первого слова
$name =~ tr/A-Z/a-z/;   #перевести все в нижний регистр
if ($name eq "alex") {
   print "Привет, Alex! Рад тебя видеть\n";
} else {
   print "Привет, $original_name!\n";  #обычное приветствие
   $secretword = $words{$name};   #получить секретное слово
   if ($secretword eq "") {   # не найдено
      $secretword = "groucho";    #можно использовать
   }
   print "Секретное слово? ";
   $guess = <STDIN>;
   chomp($guess);
   while ($guess ne $secretword) {
      print "Неверно, попробуйте еще раз. Секретное слово? ";
      $guess = <STDIN>;
      chomp($guess);
   }
   print "Угадали!\n";
}

Так как первоначальное значение $name уничтожается, то в программе присутствует переменная $original_name , с помощью которой приветствуется пользователь.

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

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.
Все пожелания - авторам: Алексею Машьянову , Александру Яковлеву .