Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Изучаем Perl - Шварц Р.

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 124 >> Следующая

выводить на печать всю информацию, либо после выполнения print изменить
переменную "число строк на текущей странице". Через минуту мы увидим, как
можно изменить это значение.
Изменение в форматах установок по умолчанию
Мы часто говорим об использовании в тех или иных ситуациях значений "по
умолчанию". В Perl имеется способ отмены этих "умолчаний" практически для
всех случаев. Давайте поговорим об этом.
Изменение дескриптора файла с помощью функции select()
Когда мы говорили о функции print в главе 6, я упомянул, что print и
print stdout идентичны, потому что stdout - это установка по умолчанию
для print. Это не совсем так. Настоящая установка по умолчанию для print
(а также для write и еще нескольких операций, до которых мы скоро
доберемся) - это выбранный в текущий момент дескриптор файла.
Вначале выбранный в текущий момент дескриптор файла - это stdout,
благодаря чему упрощается отправка данных на стандартный вывод. Изменить
выбранный в текущий момент дескриптор файла можно с помощью
162
Им/чае.u PerI
функции select. В качестве аргумента эта функция принимает отдельный
дескриптор файла (или скалярную переменную, которая содержит имя
дескриптора файла). Изменение выбранного в текущий момент дескриптора
файла влияет на все последующие операции, которые от него зависят.
Например:
print "hello world\n"; # аналогично print STDOUT "hello worldin"
select (LOGFILE); # выбрать новый дескриптор файла
print "howdy, worldin"; # аналогично print LOGFILE "howdy,
worldin"
print "more for the login"; # еще в LOGFILE
select (STDOUT); # вновь выбрать STDOUT
print "back to stdoutin"; # это идет на стандартный вывод
Отметим, что операция select - "липкая"; после выбора нового дескриптора
он остается "выбранным в текущий момент" до проведения следующей операции
select.
Таким образом, более удачное определение stdout по отношению к функциям
print и write будет звучать так: stdout - выбранный в текущий момент
дескриптор по умолчанию, или просто дескриптор по умолчанию.
В подпрограммах может возникать необходимость смены выбранного в текущий
момент дескриптора файла. Представляете, какое неприятное чувство можно
испытать, вызвав подпрограмму и обнаружив, что все тщательно проверенные
строки текста уходили куда-то "налево", потому что подпрограмма,
оказывается, изменила выбранный в текущий момент дескриптор файла и не
восстановила его! Что же должна делать "хорошо воспитанная" подпрограмма?
Если она "знает", что текущий дескриптор - stdout, она может восстановить
выбранный дескриптор с помощью кода, похожего на приведенный выше. А если
программа, которая вызвала подпрограмму, уже изменила выбранный
дескриптор файла - что тогда?
Оказывается, значение, возвращаемое функцией select, - это строка,
которая содержит имя ранее выбранного дескриптора. Получив данное
значение, можно впоследствии восстановить этот дескриптор, используя
такой код:
Soldhandle = select LOGFILE; print "this goes to LOGFILE\n";
select (Soldhandle); # восстановить предыдущий дескриптор
Действительно, в приведенных выше примерах гораздо проще в качестве
дескриптора файла для print явным образом указать logfile, но некоторые
операции, как мы вскоре увидим, требуют именно изменения выбранного в
текущий момент дескриптора файла.
И. Форматы
Изменение имени формата
Имя формата по умолчанию для конкретного дескриптора файла совпадает с
именем этого дескриптора. Для выбранного в текущий момент дескриптора
файла этот порядок можно изменить, присвоив новое имя формата специальной
переменной $~. Можно также проверить значение этой переменной и
посмотреть, каков текущий формат для выбранного в текущий момент
дескриптора файла.
Например, чтобы использовать формат addresslabel с дескриптором stdout,
следует просто записать:
$~ = "ADDRESSLABEL";
А что, если нужно установить для дескриптора report формат summary? Для
этого необходимо сделать всего лишь следующее:
5oldhanlde = select REPORT;
= "SUMMARY"; select (?oldhandle);
Когда в следующий раз мы напишем
write (REPORT);
то тем самым передадим текст на дескриптор report, но в формате summary*.
Обратите внимание на то, что вы сохранили предыдущий дескриптор в
скалярной переменной, а затем восстановили его. Этот прием - признак
хорошего стиля программирования. В коде реальной программы мы, вероятно,
решили бы предыдущий однострочный пример таким же способом, а не
предполагали бы, что stdout - дескриптор по умолчанию.
Изменяя текущий формат для конкретного дескриптора файла, вы можете
чередовать в одном отчете много разных форматов.
Изменение имени формата начала страницы
Точно так же, как путем установки переменной $~ мы можем изменять имя
формата для конкретного дескриптора файла, так путем установки переменной
$Л мы можем менять формат начала страницы. Эта переменная содержит имя
формата начала страницы для выбранного в текущий момент дескриптора файла
и доступна для чтения и записи, т.е. вы можете проверить ее значение и
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 124 >> Следующая