Анимация
JavaScript
|
Главная Библионтека или отсутствии скобок после вызова. Но эта тема втходит за рамки нашей книги. Вы можете удовлетворить свое любопытство, обратившись к странице perlsub справочного руководства В моей программе есть строка var), для которой Perl в1воциг сообщение об ошибке syntax error, next 2 tokens щу(. Вы или что-то неправильно набрали, или у вас установлен Perl версии 4. Наберите в командной строке perl -v. Если у вас действительно четвертая версия, немедленно установите более новую. Как передавать в подпро1р)амму или возвращать из нее функции, дескрипторы файлов, а также сразу несколько массивов или хэшей? Для передачи функций, нескольких массивов или хэшей нужно использовать указатели, рассматриваемые на 13-м занятии, "Структуры и ссылки". Для передачи дескрипторов файлов в подпрограмму и обратно следует воспользоваться модулем 10;: Handle -или методикой приведения типов (typeglob). Обе эти темы выходят за рамки данной книги. Моя функция возвращает много значений, а мне нужно только одно. Как пропустить ос1альн1е значения? Один из методов - создание списка литералов, для чего вызов функции помешают в круглые скобки. Затем вы можете выбрать любую интересующую вас часть этого списка. В следующем примере извлекается значение года (текущий год минус 1900) из встроенной функции localtime, возвращающей сразу девять значений: pdut "ЕЬдкре ", ISOOf (localtime)[5]; Другой метод - присваивание переменных списку таким образом, чтобы все ненужные значения присваивались undef или какой-нибудь вспомогательной переменной: (undef, undef, undef, undef, undef, $year offset)=localtime; Семинар Контрольные вопросы Посмотрите на следующий блок кода: sub bear { <$a, $b)=i ; Sb=100; $a=$a+l; sub foo { Ш ($a)=67; local(Sb)=8 ; bar($a, $Ь)Г £oo(5, 10) 1. Какое значение будет иметь переменная $Ь после выполнения оператора bar($a, $b)? а) 5; б) 100; в) 68. 2. Какое значение возвращается функцией foo()? а) 67; б) 68; в) undef. 3. Какую область видимости имеет переменная $Ь в функции foo{)? а) лексическую; б) динамическую; в) глобальную. Ответы 1. Правильный ответ - вариант б). $Ь - локальная неременная функции поэтому каждая вызываемая из нее подпрограмма может использовать эту переменную (если в ней не объявляется новая переменная с таким же именем с помощью операторов local или После вызова функции bar () значение неременной Sb изменяется и становится равным 100. 2. Правильным является вариант б). Удивлены? Последнее выражение функции возвращает 68, так как значение $а передается в Ьаг{) и там инкрементируется. Функция foo() возвращает значение своего последнего выражения - 68. 3. Правильный ответ вариант б). Переменные, объявленные с помощью оператора local, называются переменными с динамической областью видимости. Упражнения • Используйте функции упражнения по статистике, приведенные выще, и код подсчета слов, рассмотренный на 7-м занятии, "Хэши", для анализа длины слов в документе. Вычислите их среднюю длину, медиану и стандартное отклонение длины. • Напишите функцию для вывода части последовательности чисел Фибоначчи. Числа Фибоначчи - это бесконечная математическая последовательность, подсказанная самой природой. Она начинается с 0, 1, I, 2, 3, 5, 8. Каждый последующий ее член является суммой двух предьщуших (кроме 0 и 1). Эти числа могут быть вычислены с помощью рекурсивной процедуры или цикла. 138 Часть I. cEi Часть II Углубляемся в Perl Темы занятий 9 Дополнительные функции и операторы 10 Файлы и каталоги 11 Взаимодействие с операционной системой 12 Работа с командной строкой Perl 13 Структуры и ссылки 14 Использование модулей 15 Обработка данных в Perl 16 Сообщество Perl 140 154 172 187. 200 216 230 249 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |