Анимация
JavaScript


Главная  Библионтека 

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

или отсутствии скобок после вызова. Но эта тема втходит за рамки нашей книги. Вы можете удовлетворить свое любопытство, обратившись к странице 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