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

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

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

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

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

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

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 45 46 47 48 49 50 < 51 > 52 53 54 55 56 57 .. 124 >> Следующая

* На самом деле образец по умолчанию - строка поэтому начальный
пробельный разделитель игнорируется, но для нас вышесказанного пока
достаточно
122
Научаем Perl
Упражнения
Ответы к упражнениям даны в приложении А.
1. Постройте регулярное выражение, которое соответствует:
а) минимум одному символу а, за которым следует любое число символов Ь;
б) любому числу обратных косых, за которым следует любое число звездочек
(любое число может быть и нулем);
в) трем стоящим подряд копиям того, что содержится в переменной
$whatever;
г) любым пяти символам, включая символ новой строки;
д) одному слову, написанному два или более раз подряд (с возможно
изменяющимся пробельным символом), где "слово" определяется как непустая
последовательность непробельных символов.
2. а) Напишите программу, которая принимает список слов из stdin и
ищет строку, содержащую все пять гласных (а, е, i, о и и). Запустите эту
программу с /usr/dict/words* и посмотрите, что получится. Другими
словами, введите
$ программа </usr/dict/words
б) Модифицируйте программу так, чтобы пять гласных должны были стоять по
порядку, а промежуточные буквы значения не имели.
в) Модифицируйте программу так, чтобы все гласные должны были стоять в
порядке возрастания, чтобы все пять гласных должны были присутствовать и
чтобы перед буквой "а" не стояла буква "е", перед буквой "е" не стояла
буква "i" и т.д.
3. Напишите программу, которая просматривает файл /etc/passwd** (из
stdin), выводя на экран регистрационное имя и реальное имя каждого
пользователя. (Совет: с помощью функции split разбейте строку на поля, а
затем с помощью s/// избавьтесь от тех частей поля comment, которые стоят
после первой запятой.)
* Словарь вашей системы может находиться не в каталоге /usr/dict/words',
обратитесь к man-странице spell(l).
** Если используется NIS, то файл /etc/passwd в вашей системе будет
содержать мало данных Посмотрите, может быть, ypcat passwd даст больше
информации.
7. Регулярные выражения
123
4. Напишите программу, которая просматривает файл /etc/passwd (из stdin)
на предмет наличия двух пользователей с одинаковыми именами и выводит эти
имена. (Совет: после извлечения первого имени создайте хеш с этим именем
в качестве ключа и числом его экземпляров в качестве значения. Прочитав
последнюю строку stdin, ищите в этом хеше счетчики с показанием больше
единицы.)
5. Повторите последнее упражнение, но с выдачей имен всех пользователей,
зарегистрировавшихся под одинаковыми именами. (Совет: в хеше вместо числа
экземпляров сохраните список регистрационных имен, записанных через
пробелы. Затем ищите значения, содержащие пробел.)
В этой главе:
• Определение пользовательской функции
• Вызов пользовательской функции
• Возвращаемые значения
• Аргументы
• Локальные переменные в функциях
• Полулокальиые переменные, созданные при помощи функции local
• Создаваемые операцией ту() переменные файлового уровня
• Упражнения
Мы уже знакомы со встроенными пользовательскими функциями, например
chomp, print и другими, и пользовались ими. Теперь давайте рассмотрим
функции, которые вы можете определить сами.
Определение пользовательской функции
Пользовательская функция, чаще называемая подпрограммой, определяется в
Perl-программе с помощью следующей конструкции:
sub имя (
оператор__1 ; оператор_2; оператор_3;
}
Здесь имя - это имя подпрограммы, которое может быть любым именем вроде
тех, которые мы давали скалярным переменным, массивам и хешам. Вновь
подчеркнем, что эти имена хранятся в другом пространстве имен, поэтому у
вас может быть скалярная переменная $fred, массив @fred, хеш %fred, а
теперь и подпрограмма fred*.
* Более правильно эту подпрограмму следовало бы назвать &f red, но
пользоваться такого рода именами приходится редко
8
Функции
8. Функции
125
Блок операторов, следующий за именем подпрограммы, становится ее
определением. Когда эта подпрограмма вызывается, то блок операторов,
входящих в нее, выполняется, и вызывающему объекту выдается
соответствующее возвращаемое значение (как будет описано ниже).
Вот, например, подпрограмма, которая выдает знаменитую фразу:
sub say_hello {
print "hello, world!\n";
}
Определения подпрограмм могут стоять в любом месте текста программы (при
выполнении они пропускаются), но обычно их размещают в конце файла
программы, чтобы основная часть программы находилась в начале. (Если вам
часто приходилось писать программы на языке Паскаль, можете по привычке
поставить свои подпрограммы в начало, а выполняемые операторы - в конец.
Это ваше дело.)
Определения подпрограмм глобальны*; локальных подпрограмм не бывает. Если
у вас вдруг появились два определения подпрограмм с одинаковым именем, то
второе определение заменяет первое без предупреждения**.
В теле подпрограммы вы можете обращаться к переменным, используемым в
других частях программы (глобальным переменным), и присваивать им
значения. По умолчанию любая ссылка на переменную в теле подпрограммы
Предыдущая << 1 .. 45 46 47 48 49 50 < 51 > 52 53 54 55 56 57 .. 124 >> Следующая