PERL: БИБЛИОТЕКА ПРОГРАММИСТА



   Программа конвертации в Формат DCP.             

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 345


unless ($a = sfunc()) { die sfunc failed } unless (@a = afunc()) { die afunc failed } unless (%a = hfuncO) { die hfunc failed }

Некоторые встроенные функции Perl иногда возвращают довольно странные значения. Например,   fcntl и   loctl в некоторых ситуациях возвращают строку


362   Глава 10 • Подпрограммы

"О but true" (для удобства эта волшебная строка была изъята из бесчисленных предупреждений об ошибках преобразования флага -w). Появляется возмож­ность использовать конструкции следующего вида:

ioctl(..,.) or die "can't ioctl: $!";

В этом случае программе не нужно отличать определенный ноль от неопреде­ленного значения, как пришлось бы делать для функций read или glob. В число­вой интерпретации "О but true" является нулем. Необходимость в возвращении подобных значений возникает довольно редко. Более распространенный (и эффект­ный) способ сообщить о неудаче при вызове функции заключается в иницииро­вании исключения (см. рецепт 10.12).

> Смотри также---------------------------------------------------------------------------------------------

Описание функций wantarray и return вperlfunc(i); рецепт 10.12.

10.11. Прототипы функций

Проблема

Вы хотите использовать прототипы функций, чтобы компилятор мог проверить типы аргументов.

Решение

В Perl существует нечто похожее на прототипы, но это сильно отличается от прототипов в традиционном понимании. Прототипы функций Perl больше напо­минают принудительный контекст, используемый при написании функций, ко­торые ведут себя аналогично некоторым встроенным функциям Perl (например, push и pop).

Комментарий

Фактическая проверка аргументов функции становится возможной лишь во время выполнения программы. Если объявить функцию до ее реализации, ком­пилятор сможет использовать очень ограниченную форму прототипизации. Не путайте прототипы Perl с теми, что существуют в других языках. В Perl прото­типы предназначены лишь для эмуляции поведения встроенных функций.




Содержание  Назад  Вперед