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

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

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

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

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

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

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 124 >> Следующая

1. Вот несколько возможных ответов:
а) /а+Ь*/
б) /\\*\**/ (Вспомним, что обратная косая черта отменяет значение
следующего за ней специального символа.)
в) / ($whatever) {3} / (Не забудьте про круглые скобки, иначе множитель
будет действовать только на последний символ $whatever; этот вариант не
проходит также в том случае, если $whatever содержит специальные
символы.)
г) / [\000-\377] {5} / или / (. I\п) {5} / (Использовать точку без
дополнительных знаков здесь нельзя, потому что она не соответствует
символу новой строки.)
д) / (Л I \s) (\S+) (\s+\2) + (\s | $) / (\s - это не пробельный символ,
а \2 - ссылка на все, что есть "слово"; знак А или альтернативный
пробельный символ гарантирует, что \s+ начинается на границе пробельного
символа.)
2. а) Вот один из способов решения этой задачи:
while (<STDIN>) (
if (/a/i && /е/i && /i/i && /о/i && /u/i) {
print;
}
}
Здесь у нас приведено выражение, состоящее из пяти операций
сопоставления. Все эти операции проверяют содержимое переменной куда
управляющее выражение цикла while помещает каждую строку. Выражение даст
значение "истина" лишь в том случае, если будут найдены все пять гласных.
Приложение А. Ответы к упражнениям
269
Обратите внимание: если любая из пяти гласных не обнаруживается,
остальная часть выражения пропускается, потому что операция & & не
вычисляет свой правый аргумент, если значение левого аргумента - "ложь".
б) Еще один способ:
while (<STDIN>) {
if (/а.*е.*1.*о.*u/i) ( print;
}
>
Этот ответ, как оказывается, проще. Здесь у нас в операторе if
используется более простое регулярное выражение, которое ищет пять
гласных в указанной последовательности, разделенных любым количеством
символов.
в) Вот один из способов решения этой задачи:
while (<STDIN>) (
if (/Л [eiou ] *а [ Люи] *е [ Лаои] *1 [ Лаеи] *о [ "'aei ] *u [ Лаею]
*$/i) {
print;
)
}
Выглядит уродливо, но работает. Чтобы написать такое, просто подумайте:
"Что может стоять между началом строки и первой буквой а?", а затем "Что
может стоять между первой буквой а и первой буквой е?". В конце концов
все решится само, от вас потребуется минимум усилий.
Вот один из способов решения этой задачи:
while (<STDIN>) ( chomp;
($user, $gcos) = (split /:/) [0,4];
($real) = split(/,/, $gcos); print "$user is $real\n";
}
Во внешнем цикле while производится считывание по одной строке из файла
паролей в переменную $_. По достижении последней строки цикл завершается.
Вторая строка тела цикла whi 1е означает разбиение строки на отдельные
переменные с использованием в качестве разделителя двоеточия. Два из этих
семи значений заносятся в отдельные скалярные переменные с имеющими смысл
(мы надеемся) именами.
Поле GCOS (пятое поле) затем разбивается на части с использованием в
качестве разделителя символа запятой, и список-результат присваивается
Изучаем Perl
одной скалярной переменной, заключенной в круглые скобки. Эти скобки
играют важную роль - они указывают, что операция присваивания должна быть
не скалярной, а для массива. Скалярная переменная $real получает первый
элемент списка-результата, а остальные элементы отбрасываются.
Оператор print затем выводит результаты на экран.
4. Вот один из способов решения этой задачи:
while (<STDIN>) { ch omp;
(Sgcos) = (split /:/) [4];
(Sreal) = split (/,/, Sgcos);
(Sfirst) = split(/\s+/, Sreal);
Sseen(Sfirst}++;
}
foreach (keys %seen) { if (Sseen{S_) > 1) (
print "S_ was seen Sseen(S_) times\n";
)
}
Цикл while работает во многом так же, как цикл while из предыдущего
упражнения. Помимо разбивки строки на поля и поля GCOS на реальное имя (и
другие компоненты), в этом цикле осуществляется также разбиение реального
имени на собственно имя и остальную часть. После определения имени
элемент хеша в %seen инкрементируется, отмечая тот факт, что мы нашли
конкретное имя. Обратите внимание: оператор print в этом цикле не
используется.
В цикле foreach осуществляется проход по всем ключам хеша %seen (именам
из файла паролей) с присваиванием каждого из них по очереди переменной
$_. Если значение, записанное в %seen по данному ключу, больше 1, значит,
это имя уже встречалось. Оператор i f проверяет, так ли это, и при
необходимости выводит соответствующее сообщение.
5. Вот один из способов решения этой задачи:
while (<STDIN>) ( ch omp ;
(Suser, Sgcos) = (split /:/) [0,4];
(Sreal) = split /,/, Sgcos;
(Sfirst) = split(/\s+/, Sreal);
Sseen{Sfirst} .= " Suser";
}
foreach (keys %names) {
Sthis = Snames(S_);
if (Sthis =~ /. /) {
print "S_ is used by:Sthis\n";
}
}
Приложение А. Ответы к упражнениями
271
Эта программа похожа на ответ к предыдущему упражнению, но вместо того
чтобы просто подсчитывать, сколько раз у нас встречалось определенное
имя, мы присоединяем регистрационное имя пользователя к элементу хеша %
names, указывая имя в качестве ключа. Так, для Фреда Роджерса
(регистрационное имя mrrogers) $ names { "Fred" } становится равным "
mrrogers", а когда появляется Фред Флинтстоун (регистрационное ИМЯ fred),
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 124 >> Следующая