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



              

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


sub LOCK_SH (){1} sub LOCK_EX () { 2 } sub LOCKJJN  ()   {  4  }

Имитация встроенных функций

Прототипы также часто применяются для имитации поведения таких встроен­ных функций, как push и shift, передающих аргументы без сглаживания. При вызове push (@а г ray, 1, 2, 3) функция получает ссылку на @а г ray вместо самого массива. Для этого в прототипе перед символом @ ставится обратная косая черта:

sub mypush (\@@) { my $array_ref = shift; my ©remainder = @_;


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

\@ в прототипе означает «потребовать, чтобы первый аргумент начинался с символа @, и передавать его по ссылке». Второй символ @ говорит о том, что осталь­ные аргументы образуют список (возможно, пустой). Обратная косая черта, с ко­торой начинается список аргументов, несколько ограничивает ваши возможнос­ти. Например, вам даже не удастся использовать условную конструкцию ?: для выбора передаваемого массива:

mypush( $х > 10 ? @а  : @b ,   3,   5 );      # НЕВЕРНО

Вместо этого приходится изощряться со ссылками: mypush( @{ $х > 10 ? @а  : @b },   3,  5 );        # ВЕРНО

Приведенная ниже функция hpush работает аналогично push, но для хэшей. Функция дописывает в существующий хэш список пар <<ключ/значение>>, переоп­ределяя прежнее содержимое этих ключей.

sub hpush(\%@)  {

my $href =   shift;

while ( my   ($k, $v) = splice(@_, 0, 2) ) {
$href->{$k} = $v;

> }

hpush(%pieces,  "queen" => 9, "rook" => 5);

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

Описание функции prototype вperlfunc(l);perlsub(l); рецепт 10.5.

10.12. Обработка исключений

Проблема

Как организовать безопасный вызов функции, способной инициировать исклю­чение? Как создать функцию, инициирующую исключение?

Решение

Иногда в программе возникает что-то настолько серьезное, что простого возвра­щения ошибки оказывается недостаточно, поскольку та может быть проигнори­рована вызывающей стороной. Включите в функцию конструкцию die СТРОКА, чтобы инициировать исключение:




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