Поиск

Вопросы и ответы

Есть ли на самом деле какая-то разница при вызове функции с символом & и без него?

Нет ничего такого, что могло бы иметь к вам какое-нибудь отношение. Существует небольшая разница между вызовами &foo и foo при использовании прототипов функций или отсутствии скобок после вызова. Но эта тема выходит за рамки нашей книги. Вы можете удовлетворить свое любопытство, обратившись к странице perlsub справочного руководства

В моей программе есть строка my($var), для которой Perl выводит сообщение об ошибке syntax error, next 2 tokens my(.

Вы или что-то неправильно набрали, или у вас установлен Perl версии 4. Наберите в командной строке perl -v. Если у вас действительно четвертая версия, немедленно установите более новую.

Как передавать в подпрограмму или возвращать из нее функции, дескрипторы файлов, а также сразу несколько массивов или хэшей?

Для передачи функций, нескольких массивов или хэшей нужно использовать указатели, рассматриваемые на 13-м занятии, "Структуры и ссылки". Для передачи дескрипторов файлов в подпрограмму и обратно следует воспользоваться модулем 10::Handle или методикой приведения типов (typeglob). Обе эти темы выходят за рамки данной книги.

Моя функция возвращает много значений, а мне нужно только одно. Как пропустить остальные значения?

Один из методов — создание списка литералов, для чего вызов функции помешают в круглые скобки. Затем вы можете выбрать любую интересующую вас часть этого списка. В следующем примере извлекается значение года (текущий год минус 1900) из встроенной функции localtime, возвращающей сразу девять значений:

Другой метод — присваивание переменных списку таким образом, чтобы все ненужные значения присваивались undef или какой-нибудь вспомогательной переменной: