Отправляет email-рассылки с помощью сервиса Sendsay

Perl - подпишись и учись!

  Все выпуски  

Perl - подпишись и учись!


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

 Hi, All!  
    Приветствую всех!(А именно 5605 подписчиков)
    Виноват, за долгий отпуск в выпусках рассылки. Надеюсь, с сего момента рассылка будет выходить почаще.
    Сегодня продолжим разговор о циклах в PERL. Начнём с оператора while. Оператор while играет довольно важную роль в Perl. Вот как он выглядит:
  метка while (выражение){блок}
  метка while (выражение){блок} continue {блок2}
    Тело цикла выполняется, пока значение выражения остаётся в значении истина (проверка на истинность происходит перед каждой итерацией цикла). Метка используется для передачи управления в начало цикла в случае, когда нормальное выполнение тела цикла прерывается (см. ниже next, redo и last).
    Следующий пример суммирует доходы пользователя до тех пор, пока сумма не превысит миллион:
 $savings=0;
  while($savings< 1_000_000){
   print "Введите сумму, заработанную сегодня:";
   $_=<>;
   chomp $_;
   $savings+=$_;}
    А в этом примере, использовавшимся в пердыдущих выпусках рассылки, цикл while применяется для перебора всех значений хэша с помощью функции each, возвращающей при каждом обращении очередную пару ключ/значение:
  $hash{fruit}=orange;
  $hash{sandwich}=clubburger;
  $hash{drink}=lemonade;
  while(($key, $value) = each(%hash)){
   print "$key => $value";}

  Результат:
drink => lemonade
fruit => orange
sandwich => clubburger
    Специальная форма цикла - цикл while(<>) - имеет полезное свойство: внутренняя переменная Perl $_ автоматически заполняется данными, построчно вводимыми через стандартный поток ввода. Это означает, что можно с пользой применять многочисленные функции Perl, использующие переменную $_ как аргумент по умолчанию:
while(<>){
print;}
Блок continue, если он, конечно, задан, выполняется всякий раз, когда тело цикла выполнено полностью или частично перед очередной проверкой условия цикла. Например с помощью блока continue можно заставить цикл while вести себя наподобие for:
  $index=0;
  while($index <= 5){
    print "Hi, All!\n"}
   continue{$index++;}

  Результат:
Hi, All!
Hi, All!
Hi, All!
Hi, All!
Hi, All!
Hi, All!
    Оператор while проверяет условие перед выполнением тела цикла, так что оно может вообще ни разу ни выполниться. Это удобно, если тело цикла организовано таким образом, что его выполнение при нарушенном условии цикла может вызывать проблемы. Например, в следующем примере программа не будет печатать строки, вводимые из файла, если дескриптор файла FileHandle не связан ни с одним файлом:
  while(){
print;}
    Т.к. мы упомянули о цикле while, то будет грешно не рассказать о until. until является "братом-близнецом" while, то есть выполняет те же функции, что и while, за тем малым исключением, что выражение должно быть ложью (аналогично if и unless). Этот цикл записывается так:
  метка until (выражение){блок}
  метка until (выражение){блок} continue {блок2}
По аналогии с примером, расположенным выше, напечатаем шесть раз подряд с помощью оператора цикла until текст "Hi, All!\n":
  $index=0;
  until($index > 5){
    print "Hi, All!\n"}
   continue{$index++;}

  Результат:
Hi, All!
Hi, All!
Hi, All!
Hi, All!
Hi, All!
Hi, All!
________________________________________
В составлении выпуска были использованы материалы книги Стивена Холзнера(Steven Holzner) "Perl. Core Language. Little Black Book", а также документация, прилагаемая к самому PERLу. ________________________________________
И ещё, если у вас есть вопросы, то задавайте их на форуме сайта(http://perl.bos.ru). ________________________________________
                С уважением, Дмитрий.

Another Banner Network

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное