П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 176173 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 72994 раз(а).

Учебник HTML.
Просмотров 72700 раз(а).

Руководство по PHP5.
Просмотров 43461 раз(а).

Хостинг через призму DNS.
Просмотров 50026 раз(а).

Подборка текстов стандартных документов.
Просмотров 43691 раз(а).

Учебник PHP - Самоучитель
Просмотров 50007 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 50365 раз(а).

Внешние атаки...
Просмотров 40779 раз(а).

Учебник PHP.
Просмотров 35897 раз(а).

SSI в примерах.
Просмотров 26978 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 1: Введение.
1.5. Прогулка по стране Perl
1.5.6. Обработка различных вариантов ввода секретного слова

Если вместо Randal вы введете Randal L. Schwartz или randal, то тем самым лишите Рэндала права на особое приветствие, потому что сравнение eq предполагает точное равенство. Давайте рассмотрим один способ решения задачи обработки различных вариантов ввода.

Допустим, вы хотите найти все строки, которые начинаются со слова Randal, а не просто строку, равную Randal. В sed, awk или grep это можно сделать с помощью регулярного выражения — шаблона, определяющего совокупность соответствующих строк. Как и в sed, awk или grep, в Perl регулярным выражением, которое соответствует любой строке, начинающейся со слова Randal, будет ^Randal. Чтобы сравнить его со строкой, содержащейся в скалярной переменной $name, мы используем операцию сопоставления:

if ($name =~ /^Randal/) { # да, совпадает 

} else { # нет, не совпадает

Обратите внимание на то, что регулярное выражение выделяется косой чертой с обеих сторон. Пробелы и другие пробельные символы, заключенные между косыми, имеют значение, поскольку они являются частью строки.

Это почти решает нашу задачу, но не позволяет выбрать randal или отклонить Randall. Чтобы принять randal, мы добавляем опцию игнорирования регистра — прописную букву i после закрывающей косой. Чтобы отклонить Randall, мы вводим в регулярное выражение специальный маркер границы слова (подобно тому как это делается в vi и в некоторых версиях grep) в форме \b. Это гарантирует, что символ, следующий в регулярном выражении за первой буквой l, не является еще одной буквой. В результате наше регулярное выражение принимает вид /^randal\b/i, что означает "слово randal, стоящее в начале строки, за которым нет ни буквы, ни цифры, при этом регистр не имеет значения". Объединив этот фрагмент с остальной частью программы, получим:

#!/usr/bin/perl

%words = qw ( fred camel barney llama betty alpaca wilma alpaca );

print "What is your name? ";
$name = <STDIN>;
chomp ($name);

if ($name =~ /^randal\b/i) {
  print "Hello, Randal! How good of you to be here!\n";

} else {
  print "Hello, $name! \n"; # обычное приветствие
  $secretword = $words {$name}; # получить секретное слово 

  if ($secretword eq "") { # не найдено
    $secretword = "groucho"; # конечно, можно использовать
  }

  print "What is the secret word? ";
  $guess = <STDIN>;
  chomp ($guess);

  while ($guess ne $secretword) {
    print "Wrong, try again. What is the secret word? ";
    $guess = <STDIN> ;
    chomp ($guess);

Как видите, эта программа уже довольно далека от простенькой Hello, World. Хотя она и очень мала, но вполне работоспособна, причем краткость программы достигается весьма небольшими усилиями. В этом — стиль Perl.

В Perl имеется все, что необходимо для работы с регулярными выражениями, т.е. он предоставляет все возможности, которые обеспечивает любая стандартная утилита UNIX (и даже некоторые нестандартные). Способ сопоставления строк, используемый в Perl, является, чуть ли не самым быстрым сравнительно с другими языками, поэтому производительность системы при выполнении Perl-программ никоим образом не снижается. (Написанная на Perl grep-подобная программа часто превосходит прилагаемую поставщиками программу grep на С*. Это значит, что grep не выполняет толком даже единственную свою задачу.)

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru