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

О проекте

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.13. Как получить список секретных слов

Итак, Главный Директор Списков Секретных Слов желает получить отчет обо всех секретных словах, используемых в текущий момент, с указанием их "возраста". Если мы на минутку расстанемся с программой проверки секретного слова, у нас будет время написать для Директора программу формирования необходимого ему отчета.

Сперва давайте получим все наши секретные слова, воспользовавшись для этого частью кода из подпрограммы init_words():

while ( defined($filename = glob("*.secret")) ) {
  open (WORDSLIST, $filename) II die "can't open wordlist: $!";

  if (-M WORDSLIST >=7.0) <

    while ($name - <WORDSLIST” {
      chomp ($name);
      $word = <WORDSLIST>; 
      chomp ($word);

      *** отсюда начинается новый код
    }
  }
  close (WORDSLIST) || die "couldn't close wordlist: $!"
}

К моменту достижения того места программы, где дан комментарий "отсюда начнется новый код", мы знаем три вещи: имя файла (содержится в переменной $filename), чьето имя (в переменной $name) и секретное слово этого человека (содержится в $word). Здесь и нужно использовать имеющиеся в Perl инструменты формирования отчетов. Для этого где-то в программе мы должны определить используемый формат (обычно это делается в конце, как и для подпрограмм):

format STDOUT =
@“““““<““ @<““““ @“““““< $filename, $name, $word

Определение формата начинается строкой format stdout=, а завершается точкой. Две строки между первой строкой и точкой — это сам формат. Первая строка формата — это строка определения полей, в которой задается число, длина и тип полей. В этом формате у нас три поля. Строка, следующая за строкой определения полей — это всегда строка значений полей. Строка значений содержит список выражений, которые будут вычисляться при использовании формата; результаты вычисления этих выражений вставляются в поля, определенные в предыдущей строке.

Вызывается определенный таким образом формат функцией write, например:

#!/usr/bin/perl

while ( defined($filename = glob("*.secret")) ) {
  open (WORDSLIST, $filename) || die "can't open wordlist: $"';

  if (-M WORDSLIST >= 7.0) { 

    while ($name = <WORDSLIST>) { 
      chomp ($name);
      $word = <WORDSLIST> ;
      chomp ($word) ;
      write; # вызвать format STDOUT в STDOUT
    }
  }
  close (WORDSLIST) II die "couldn't close wordlist: $!"; 
}

format STDOUT ”
@ 
<<<<<<<<<<<<<<<
@ 
<<<<<<<<<< 
@ 
<<<<<<<<<<<< 
$filename, $name, $word

Когда вызывается формат. Perl вычисляет выражения, имеющиеся в строке значений, и генерирует строку, которую передает в дескриптор файла stdout. Поскольку write вызывается один раз при каждом проходе цикла, мы получим ряд строк (под одной строке для каждого секретного слова); итоговый текст будет разбит на столбцы.

Гм-м. Мы забыли дать столбцам названия. Впрочем, это достаточно легко сделать. Нужно просто ввести формат начала страницы:

format STDOUT_TOP = Page @“ $%
Filename Name Word

Этот формат называется stdout_top; он будет использоваться при первом вызове формата stdout, а затем через каждые 60 строк, выведенных в stdout. заголовки столбцов позиционируются точно по столбцам формата stdout, поэтому все выглядит аккуратно.

В первой строке заголовка стоит неизменяемый текст (Page) и трехзначный определитель поля. Следующая строка — строка значений полей, в данном случае она содержит выражение. Это выражение является переменной $%*, в которой содержится число выведенных страниц.

Третья строка формата пуста. А поскольку она не содержит никаких полей, то следующая за ней строка тоже пустая; она копируется прямо на вывод, вследствие чего между идущими ниже номером страницы и заголовками столбцов появляется пустая строка.

Последние две строки формата также не содержат никаких полей, поэтому они копируются на вывод в том виде, в каком записаны. Таким образом, этот формат обеспечивает создание четырех строк, одна из которых меняется от страницы к странице.

*Благодаря модулю English можно использовать для этих предопределенных скалярных переменных более мнемонические псевдонимы легко запоминающиеся названия.

Чтобы это опредиление заработало, попробуйте присоеденить его к предыдущей программе. Perl отыщет формат начала страницы автоматически.

В Perl имеются также поля, которые центрируються и выравниваются по правому краю области вывода. Этот язык кроме тогоподдерживает одновременное выравнивание и по правому и по левому краям. Подпобно об этом мы поговорим, когда дойдем до форматов , в главе 11.

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



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





Copyright © 2005-2016 Project.Net.Ru