Анимация
JavaScript
|
Главная Библионтека ($user, $gid, $gcos) = @pw[0,3,6]; {$real) = split /,/, $gcos; $real($user) = $real; $members{$gid) .= " $user"; {$last) = (split /\s + /, $real)[-l],-$last{$user) = "\L$last"; while (@gr = getgrent) { ($gname,$gid,$members) = @gr[0,2,3],• $members{$gid) .= " $members"; $gname{$gid) = $gname; for $gid (sort by gname keys %gname) { %all = 0 ; for (split(/\s+/, $members{$gid))) { $alH$ )++ if length $ ; (members = () ; foreach (sort by last keys %all) { push(Smembers, "$real{$ ) ($ )"); $memberlist = join(", ", @merabers); write; sub by gname { $gname{$a) cmp $gname{$b}; ) sub by last ( ($last{a) cmp $last{$b)) I I ($a cmp $b); ) format STDOUT = @«««<< @<«««< "««««««««««««««««««< $gname{$gid), "($gid)", $memberlist "<<«<<<<«<<«««<<«<<<<«<<««<<< $memberlist Да, в этом не так просто разобраться, но вам это придется сделать самостоятельно, чтобы проверить усвоенные знания. Глава 17 Работа с пользовательскими базами данных** I. Вот один из способов решения этой задачи: dbmopen(%ALIAS, "/etc/aliases", undef) II die "No aliases: $"; while ( ($key, $value) = each (%ALIAS) ) { chop ($key, $value) ; print "$key $value\n"; Первая строка открывает DBM псевдонимов. (В вашей системе DBM псевдонимов может находиться в каталоге /usr/lib/aliases - попробуйте этот вариант, если наш не сработает.) В цикле while осушествляется проход по DBM-массиву. Первая строка цикла служит для удаления символа NUL, которым завершались ключ и значение. Последняя строка цикла обеспечивает вывод результата. 2. Вот один из способов решения этой задачи: # program 1: dbmopen{%WORDS, "words", 0644) ; while (<>) { foreach $word (split{/\W+/)) { $WORDS{ Sword)++; dbmclose(%WORDS) ; Первая программа (записываюшая) открывает DBM words в текущем каталоге, создавая файлы words.dir и words.pag. Цикл while получает каждую строку, используя операцию "ромб". Эта строка разбивается с помощью операции split и разделителя /\w+/, который обозначает нетекстовые символы. Затем производится подсчет всех слов, имеющихся в DBM-массиве, причем для осуществления прохода в цикле по всем словам используется оператор foreach. # program 2: dbmopen(%WORDS, "words",undef); foreach $word (sort { $WORDS{$b} <=> $WORDS{$a} } keys %WORDS) { print "$word $WORDS{$word}\n"; dbmclose(%WORDS); Вторая программа также открывает DBM words в текущем каталоге. Сложная на первый взгляд строка foreach делает почти всю "грязную" работу. При каждом выполнении цикла переменной $word в качестве значения будет присваиваться следующий элемент списка. Этот список состоит из ключей хеша % WORDS, рассортированных по их значениям (т.е. количеству повторений) в убывающем порядке. Для каждого элемента списка мы выводим слово и количество его повторений. Глава 18 "Преобразование других программ в Perl-программы 1. Вот один из способов решения этой задачи: for (;;) { ($user,$home) = (getpwent)[О,7]; last unless $user; next unless open(N,"$home/.newsrc") ; next unless -M N < 30; ## added value :-) while (<N>) { if (/comp\.lang\.perl\.announce:/) { print "$user is a good person, ", "and reads сотр.lang.perl.announce\n"); last; Самый внешний цикл - это цикл for, который выполняется "вечно"; выход из этого цикла осушествляется посредством операции last, стоя-шей внугри него. При каждом выполнении цикла операция getpwent выбирает новое значение переменной $user (имя пользователя) и переменной $home (его начальный каталог). Если значение $user пусто, осуществляется выход из цикла for. Следующие две строки ищут последний файл .newsrc в начальном каталоге пользователя. Если этот файл открыть нельзя или если он изменялся слишком давно, запускается следующая итерация цикла for. В цикле while осуществляется чтение по одной строке из файла .newsrc. Если строка начинается с comp.lang.perl.announce:, то оператор print сообщает об этом, и осуществляется преждевременный выход из цикла while. Глава 19 CGI-программирование" 1. Вот один из способов рещения этой задачи: use strict; use CGI qw(:standard); print header{), start html("Add Me"); print hi("Add Me"); if(param()) { my $nl = param(fieldl) ; my $n2 = param(field2) ; my $n3 = $n2 + $nl; print p("$nl + $n2 = <strong>$n3</strong>\n"); ) else { print hr(), start form() ; print p("First Number:", textfield("fieldl")); print p("Second Number:", textfield("field2")); print p(submit("add"), reset{"clear")); print end form(), hr(); print end html(); 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [ 91 ] 92 93 94 95 96 97 98 99 100 101 102 103 |