perlfaq
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ВЕРСИЯ
- ОПИСАНИЕ
- ТАБЛИЦА СОДЕРЖАНИЯ
- ВОПРОСЫ
- perlfaq1: Общие вопросы о Perl
- perlfaq2: Получение и изучение Perl
- perlfaq3: Инструменты программирования
- perlfaq4: Обработка данных
- perlfaq5: Файлы и форматы
- perlfaq6: Регулярные выражения
- perlfaq7: Общие вопросы о языке Perl
- perlfaq8: Взаимодействие с системой
- perlfaq9: Веб, электронная почта и сети
- АВТОРЫ
- АВТОР И АВТОРСКИЕ ПРАВА
НАЗВАНИЕ
perlfaq - Часто задаваемые вопросы о Perl
ВЕРСИЯ
версия 5.20190126
ОПИСАНИЕ
Perlfaq включает несколько документов, которые отвечают на наиболее часто задаваемые вопросы о Perl и программировании на Perl. Он разделен по темам на девять основных разделов, описанных в этом документе.
Где найти perlfaq
Perlfaq — это развивающийся документ. Прочитайте последнюю версию по адресу http://learn.perl.org/faq/. Он также включен в стандартное распределение Perl.
Как использовать perlfaq
Инструмент командной строки perldoc входит в стандартное распределение Perl. Для чтения perlfaq:
$ perldoc perlfaq Для поиска заголовков вопросов perlfaq:
$ perldoc -q open Как внести свой вклад в perlfaq
Просмотрите https://github.com/perl-doc-cats/perlfaq/wiki. Если ваш вклад не найден, создайте вопрос или запрос на изменение для https://github.com/perl-doc-cats/perlfaq.
После утверждения изменения будут объединены в https://github.com/tpf/perlfaq, репозиторий, который управляет http://learn.perl.org/faq/, и они будут распределены с последующим выпуском Perl 5.
Что делать, если мой вопрос не находит ответа в FAQ?
Попробуйте ресурсы в perlfaq2.
ТАБЛИЦА СОДЕРЖАНИЯ
- perlfaq1 - Общие вопросы о Perl
- perlfaq2 - Получение и изучение Perl
- perlfaq3 - Инструменты программирования
- perlfaq4 - Обработка данных
- perlfaq5 - Файлы и форматы
- perlfaq6 - Регулярные выражения
- perlfaq7 - Общие вопросы о языке Perl
- perlfaq8 - Взаимодействие с системой
- perlfaq9 - Веб, электронная почта и сети
ВОПРОСЫ
perlfaq1: Общие вопросы о Perl
Этот раздел FAQ отвечает на очень общие, высокоуровневые вопросы о Perl.
-
Что такое Perl?
-
Кто поддерживает Perl? Кто его разрабатывает? Почему он бесплатный?
-
Какую версию Perl мне следует использовать?
-
Что такое Perl 4, Perl 5 или Perl 6?
-
Что такое Perl 6?
-
Насколько стабилен Perl?
-
Как часто выпускаются новые версии Perl?
-
Сложно ли изучить Perl?
-
Как Perl сравнивается с другими языками, такими как Java, Python, REXX, Scheme или Tcl?
-
Могу ли я сделать [задача] в Perl?
-
Когда не стоит программировать на Perl?
-
В чем разница между "perl" и "Perl"?
-
Что такое JAPH?
-
Как я могу убедить других использовать Perl?
perlfaq2: Получение и изучение Perl
Этот раздел FAQ отвечает на вопросы о том, где найти исходный код и документацию для Perl, поддержку и смежные вопросы.
-
На каких машинах поддерживается Perl? Где его получить?
-
Как получить двоичную версию Perl?
-
У меня нет компилятора C. Как я могу создать свой собственный интерпретатор Perl?
-
Я скопировал двоичный файл Perl с одной машины на другую, но скрипты не работают.
-
Я взял исходные коды и попытался скомпилировать, но gdbm/динамическая загрузка/malloc/связывание/... не удалось. Как заставить это работать?
-
Какие модули и расширения доступны для Perl? Что такое CPAN?
-
Где я могу получить информацию о Perl?
-
Что такое perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
-
Где я могу задать вопросы?
-
Книги по Perl
-
В каких журналах есть статьи о Perl?
-
Какие блоги о Perl мне следует читать?
-
Какие рассылки есть для Perl?
-
Где можно купить коммерческую версию Perl?
-
Куда отправлять сообщения об ошибках?
perlfaq3: Инструменты программирования
Этот раздел FAQ отвечает на вопросы, связанные с инструментами программиста и поддержкой программирования.
-
Как сделать (что-то)?
-
Как использовать Perl интерактивно?
-
Как найти, какие модули установлены на моей системе?
-
Как отладить свои Perl-программы?
-
Как проанализировать свои Perl-программы?
-
Как перекрестно проанализировать свои Perl-программы?
-
Есть ли красивое форматирование (форматер) для Perl?
-
Есть ли IDE или редактор Perl для Windows?
-
Где можно получить макросы Perl для vi?
-
Где можно получить perl-mode или cperl-mode для emacs?
-
Как использовать curses с Perl?
-
Как создать графический интерфейс пользователя (X, Tk, Gtk и т. д.) в Perl?
-
Как сделать свою Perl-программу быстрее?
-
Как сделать свою Perl-программу менее требовательной к памяти?
-
Безопасно ли возвращать ссылку на локальные или лексические данные?
-
Как освободить массив или хэш, чтобы уменьшить размер программы?
-
Как сделать свой CGI-скрипт более эффективным?
-
Как скрыть исходный код своей Perl-программы?
-
Как скомпилировать свою Perl-программу в байт-код или C?
-
Как заставить
#!perlработать на [MS-DOS, NT,...]? -
Можно ли писать полезные Perl-программы в командной строке?
-
Почему Perl-один-строчники не работают на моей системе DOS/Mac/VMS?
-
Где можно узнать о программировании CGI или веб-приложений на Perl?
-
Где можно узнать об объектно-ориентированном программировании на Perl?
-
Где можно узнать о связывании C с Perl?
-
Я прочитал perlembed, perlguts и т. д., но не могу встроить perl в свою C-программу; что я делаю неправильно?
-
При запуске скрипта получено это сообщение. Что это значит?
-
Что такое MakeMaker?
perlfaq4: Обработка данных
Этот раздел FAQ отвечает на вопросы, связанные с обработкой чисел, дат, строк, массивов, хэшей и различными проблемами обработки данных.
-
Почему я получаю длинные десятичные дроби (например, 19.9499999999999) вместо ожидаемых чисел (например, 19.95)?
-
Почему функция int() не работает?
-
Почему мои данные в восьмеричной системе не интерпретируются корректно?
-
Есть ли в Perl функция round()? А функции ceil() и floor()? Функции тригонометрии?
-
Как преобразовать числовые представления/основания/системы счисления?
-
Почему оператор & работает не так, как я ожидаю?
-
Как умножить матрицы?
-
Как выполнить операцию над последовательностью целых чисел?
-
Как вывести римские цифры?
-
Почему мои случайные числа не случайны?
-
Как получить случайное число между X и Y?
-
Как найти день или номер недели в году?
-
Как найти текущий век или тысячелетие?
-
Как сравнить две даты и найти разницу?
-
Как преобразовать строку в количество секунд с эпохи?
-
Как найти юлианский день?
-
Как найти дату вчерашнего дня?
-
Есть ли в Perl проблема с годом 2000 или 2038? Perl совместим с Y2K?
-
Как валидировать ввод?
-
Как разобрать строку?
-
Как удалить последовательные пары символов?
-
Как раскрыть вызовы функций в строке?
-
Как найти совпадения/вложенность чего-либо?
-
Как перевернуть строку?
-
Как заменить табуляции в строке?
-
Как переформатировать абзац?
-
Как получить доступ к N символам строки или изменить их?
-
Как изменить N-тое вхождение чего-либо?
-
Как подсчитать количество вхождений подстроки в строке?
-
Как сделать заглавными все слова в строке?
-
Как разделить строку, ограниченную символом [], за исключением случаев, когда он находится внутри символов []?
-
Как удалить пробелы в начале и конце строки?
-
Как заполнить строку пробелами или число нулями?
-
Как извлечь выбранные столбцы из строки?
-
Как найти значение soundex строки?
-
Как раскрыть переменные в текстовых строках?
-
В чем проблема с постоянным цитированием "$vars"?
-
Почему мои документы <<HERE не работают?
-
В чем разница между списком и массивом?
-
В чем разница между $array[1] и @array[1]?
-
Как удалить дублирующие элементы из списка или массива?
-
Как проверить, содержит ли список или массив определенный элемент?
-
Как вычислить разность двух массивов? Как вычислить пересечение двух массивов?
-
Как проверить, равны ли два массива или два хэша?
-
Как найти первый элемент массива, для которого выполняется условие?
-
Как обрабатывать связанные списки?
-
Как обрабатывать циклические списки?
-
Как случайным образом перемешать массив?
-
Как обработать/изменить каждый элемент массива?
-
Как выбрать случайный элемент из массива?
-
Как переставить N элементов списка?
-
Как отсортировать массив по (чему-либо)?
-
Как манипулировать массивами битов?
-
Почему defined() возвращает true для пустых массивов и хэшей?
-
Как обработать весь хэш?
-
Как объединить два хэша?
-
Что происходит, если добавить или удалить ключи из хэша во время его итерирования?
-
Как найти элемент хэша по значению?
-
Как узнать, сколько элементов в хэше?
-
Как отсортировать хэш (по значению вместо ключа)?
-
Как всегда сохранять отсортированность хэша?
-
В чем разница между «delete» и «undef» при работе с хэшами?
-
Почему связанные хэши не делают различие между defined/exists?
-
Как перезапустить операцию each() в середине обработки?
-
Как получить уникальные ключи из двух хэшей?
-
Как сохранить многомерный массив в файле DBM?
-
Как сделать хэш, запоминающий порядок добавления элементов?
-
Почему передача подпрограмме неопределенного элемента в хэше создает его?
-
Как создать в Perl эквивалент структуры C/класса C++/хэша или массива хэшей или массивов?
-
Как использовать ссылку в качестве ключа хэша?
-
Как проверить, существует ли ключ в многоуровневом хэше?
-
Как предотвратить добавление нежелательных ключей в хэш?
-
Как корректно обрабатывать бинарные данные?
-
Как определить, является ли скаляр числом/целым/целым числом/вещественным?
-
Как сохранить данные между вызовами программы?
-
Как вывести или скопировать рекурсивную структуру данных?
-
Как определить методы для каждого класса/объекта?
-
Как проверить контрольную сумму кредитной карты?
-
Как упаковать массивы двойных или плавающих чисел для кода XS?
perlfaq5: Файлы и форматы
Этот раздел посвящен вводу-выводу и проблемам с файловыми дескрипторами: дескрипторы файлов, сброс, форматы и подписи.
-
Как сбросить/разбуферизовать дескриптор выходного файла? Почему это необходимо?
-
Как изменить, удалить или вставить строку в файл или добавить её в начало?
-
Как подсчитать количество строк в файле?
-
Как удалить последние N строк из файла?
-
Как использовать опцию
-iPerl внутри программы? -
Как скопировать файл?
-
Как создать временное имя файла?
-
Как манипулировать файлами с фиксированной длиной записи?
-
Как сделать дескриптор файла локальным для подпрограммы? Как передать дескрипторы файлов между подпрограммами? Как создать массив дескрипторов файлов?
-
Как использовать дескриптор файла косвенно?
-
Как открыть дескриптор файла для строки?
-
Как настроить формат подписи для использования с write()?
-
Как записать в строку с помощью write()?
-
Как вывести числа с запятыми?
-
Как заменить тильды (~) в имени файла?
-
Почему при открытии файла для чтения и записи он очищается?
-
Почему иногда появляется сообщение «Список аргументов слишком длинный», когда используется <*>?
-
Как открыть файл, имя которого начинается с «>» или содержит пробелы в конце?
-
Как надежно переименовать файл?
-
Как заблокировать файл?
-
Почему нельзя просто использовать open(FH, ">file.lock")?
-
Я все еще не понимаю блокировки. Я хочу просто увеличить число в файле. Как это сделать?
-
Я хочу только добавить немного текста в конец файла. Нужно ли использовать блокировку?
-
Как случайным образом обновить бинарный файл?
-
Как получить временную метку файла в Perl?
-
Как установить временную метку файла в Perl?
-
Как выводить данные в несколько файлов одновременно?
-
Как прочитать весь файл сразу?
-
Как прочитать файл по абзацам?
-
Как прочитать один символ из файла? С клавиатуры?
-
Как узнать, есть ли символ, ожидающий обработки в дескрипторе файла?
-
Как выполнить
tail -fв Perl? -
Как дублировать дескриптор файла в Perl?
-
Как закрыть дескриптор файла по номеру?
-
Почему нельзя использовать «C:\temp\foo» в путях DOS? Почему «C:\temp\foo.exe» не работает?
-
Почему glob("*.*") не получает все файлы?
-
Почему Perl позволяет удалять файлы только для чтения? Почему
-iперезаписывает защищенные файлы? Это ошибка в Perl? -
Как выбрать случайную строку из файла?
-
Почему при выводе массива строк появляются странные пробелы?
-
Как пройтись по дереву каталогов?
-
Как удалить дерево каталогов?
-
Как скопировать весь каталог?
perlfaq6: Регулярные выражения
Этот раздел неожиданно небольшой, потому что остальная часть FAQ содержит ответы, использующие регулярные выражения. Например, декодирование URL и проверка является ли что-то числом, могут быть выполнены с помощью регулярных выражений, но эти ответы находятся в других частях документа (в perlfaq9 : «Как декодировать или создать кодировку % в веб-странице» и perlfaq4 : «Как определить, является ли скаляр числом/целым числом/вещественным», соответственно).
-
Как использовать регулярные выражения, не создавая нечитаемый и плохо поддерживаемый код?
-
У меня проблемы с сопоставлением строк, превышающих одну строку. В чем ошибка?
-
Как извлечь строки между двумя шаблонами, которые находятся на разных строках?
-
Как сопоставить XML, HTML или другие сложные, неудобные вещи с помощью регулярного выражения?
-
Я использовал регулярное выражение в $/ но оно не сработало. В чем ошибка?
-
Как выполнить замену регистронезависимо в левой части, сохраняя регистр в правой части?
-
Как сделать
\wсопоставление национальных наборов символов? -
Как сделать сопоставление с учётом локального расположения для
/[a-zA-Z]/? -
Как привести переменную к виду, пригодному для использования в регулярном выражении?
-
Для чего предназначено
/o? -
Как использовать регулярное выражение для удаления комментариев в стиле C из файла?
-
Можно ли использовать регулярные выражения Perl для сопоставления сбалансированного текста?
-
Что означает, что регулярные выражения жадные? Как обойти это?
-
Как обработать каждое слово в каждой строке?
-
Как вывести сводку частоты слов или строк?
-
Как выполнить приближенное сопоставление?
-
Как эффективно сопоставить множество регулярных выражений одновременно?
-
Почему поиск по границам слов с
\bне работает? -
Почему использование $&, $`, или $' замедляет мою программу?
-
Для чего предназначено
\Gв регулярном выражении? -
Являются ли регулярные выражения Perl ДКА или НКА? Соответствуют ли они стандарту POSIX?
-
Что не так с использованием grep в контексте void?
-
Как сопоставить строки с многобайтовыми символами?
-
Как сопоставить регулярное выражение, находящееся в переменной?
perlfaq7: Общие вопросы по языку Perl
Этот раздел посвящен общим вопросам языка Perl, которые не подходят чётко ни под один другой раздел.
-
Могу ли я получить BNF/yacc/RE для языка Perl?
-
Что означают все эти знаки препинания $@%&* и как я узнаю, когда их использовать?
-
Всегда ли/никогда ли мне нужно заключать мои строки в кавычки или использовать точки с запятой и запятые?
-
Как пропустить некоторые возвращаемые значения?
-
Как временно заблокировать предупреждения?
-
Что такое расширение?
-
Почему операторы Perl имеют разный приоритет, чем операторы C?
-
Как объявить/создать структуру?
-
Как создать модуль?
-
Как принять или захватить модуль, уже имеющийся на CPAN?
-
Как создать класс?
-
Как я могу определить, является ли переменная заражённой?
-
Что такое замыкание?
-
Что такое самоубийство переменных и как его предотвратить?
-
Как передать/вернуть {функцию, дескриптор файла, массив, хеш, метод, регулярное выражение}?
-
Как создать статическую переменную?
-
В чём разница между динамическим и лексическим (статическим) охватом? Между local() и my()?
-
Как получить доступ к динамической переменной, когда лексическая переменная с таким же именем находится в области видимости?
-
В чём разница между глубокой и мелкой привязкой?
-
Почему "my($foo) = <$fh>;" не работает правильно?
-
Как переопределить встроенную функцию, оператор или метод?
-
В чём разница между вызовом функции как &foo и foo()?
-
Как создать оператор switch или case?
-
Как перехватить обращения к неопределённым переменным, функциям или методам?
-
Почему метод, включённый в этот же файл, не найден?
-
Как узнать текущий или вызывающий пакет?
-
Как закомментировать большой блок кода Perl?
-
Как очистить пакет?
-
Как использовать переменную в качестве имени переменной?
-
Что означает "плохой интерпретатор"?
-
Нужно ли перекомпилировать модули XS при изменении библиотеки C?
perlfaq8: Взаимодействие с системой
Этот раздел справочника Perl содержит ответы на вопросы, связанные с взаимодействием с операционной системой. Тематика включает межпроцессное взаимодействие (IPC), управление пользовательским интерфейсом (клавиатура, экран и устройства указания) и всё остальное, что не относится к обработке данных.
-
Как узнать, под какой операционной системой я работаю?
-
Почему exec() не возвращает значение?
-
Как выполнить сложные операции с клавиатурой/экраном/мышью?
-
Как вывести текст в цвете?
-
Как прочитать только один символ с клавиатуры без ожидания нажатия клавиши возврата?
-
Как проверить, готов ли ввод с клавиатуры?
-
Как очистить экран?
-
Как получить размер экрана?
-
Как попросить пользователя ввести пароль?
-
Как читать и писать в последовательный порт?
-
Как декодировать зашифрованные файлы паролей?
-
Как запустить процесс в фоновом режиме?
-
Как перехватить управляющие символы/сигналы?
-
Как изменить файл паролей shadow на Unix-системе?
-
Как установить время и дату?
-
Как осуществить задержку sleep() или alarm() меньше секунды?
-
Как измерить время меньше секунды?
-
Как выполнить atexit() или setjmp()/longjmp()? (Обработка исключений)
-
Почему моя программа с сокетами не работает под System V (Solaris)? Что означает сообщение об ошибке "Протокол не поддерживается"?
-
Как вызвать уникальные функции C моей системы из Perl?
-
Где получить заголовочные файлы для ioctl() или syscall()?
-
Почему скрипты Perl с установленным setuid жалуются на проблемы ядра?
-
Как открыть канал связи (pipe) как для ввода, так и для вывода команды?
-
Почему я не могу получить вывод команды с помощью system()?
-
Как перехватить STDERR внешней команды?
-
Почему open() не возвращает ошибку при неудачном открытии канала связи?
-
В чём проблема использования backticks в контексте void?
-
Как вызвать backticks без обработки оболочки?
-
Почему мой скрипт не может читать из STDIN после того, как я передал ему конец файла (^D на Unix, ^Z на MS-DOS)?
-
Как преобразовать мой скрипт оболочки в Perl?
-
Можно ли использовать Perl для запуска сессии telnet или ftp?
-
Как реализовать expect в Perl?
-
Есть ли способ скрыть командную строку Perl от программ, таких как "ps"?
-
Я {изменил каталог, изменил переменные окружения} в скрипте Perl. Почему эти изменения пропали при выходе из скрипта? Как сделать так, чтобы изменения были видны?
-
Как закрыть дескриптор файла процесса без ожидания его завершения?
-
Как создать демона-процесс?
-
Как узнать, запускаюсь ли я интерактивно или нет?
-
Как задать таймаут для медленного события?
-
Как установить ограничения на использование процессора?
-
Как избежать появления зомби-процессов на Unix-системах?
-
Как использовать базу данных SQL?
-
Как заставить system() выйти при нажатии Ctrl+C?
-
Как открыть файл без блокировки?
-
Как отличить ошибки оболочки от ошибок Perl?
-
Как установить модуль с помощью CPAN?
-
В чём разница между require и use?
-
Как сохранить свой собственный каталог модулей/библиотек?
-
Как добавить каталог, в котором находится моя программа, в путь поиска модулей/библиотек?
-
Как добавить каталог в путь поиска заголовочных файлов (@INC) во время выполнения?
-
Где устанавливаются модули?
-
Что такое socket.ph и где его получить?
perlfaq9: Веб, почта и сети
Этот раздел посвящён вопросам, связанным с запуском веб-сайтов, отправкой и получением электронной почты, а также общим вопросам сетевого программирования.
-
Нужно ли использовать веб-фреймворк?
-
Какой веб-фреймворк следует использовать?
-
Что такое Plack и PSGI?
-
Как удалить HTML из строки?
-
Как извлечь URL?
-
Как получить HTML-файл?
-
Как автоматизировать отправку данных веб-формы?
-
Как декодировать или создать %-кодировки в веб-страницах?
-
Как перенаправить на другую страницу?
-
Как защитить пароли на моих веб-страницах?
-
Как гарантировать, что пользователи не смогут вводить данные, которые приведут к неправильной работе моего скрипта CGI?
-
Как разобрать заголовок почтового сообщения?
-
Как проверить корректность адреса электронной почты?
-
Как декодировать строку MIME/BASE64?
-
Как найти адрес электронной почты пользователя?
-
Как отправить электронное письмо?
-
Как использовать MIME для добавления вложений к сообщению?
-
Как читать электронную почту?
-
Как узнать имя хоста, доменное имя или IP-адрес?
-
Как получить/загрузить файл (S)FTP?
-
Как выполнить RPC в Perl?
АВТОРСКИЕ ПРАВА
Том Кристиансен написал оригинальную perlfaq и расширил ее с помощью Нэта Торкинтона. brian d foy существенно отредактировал и расширил perlfaq. perlfaq-workers и другие также предоставили отзывы, исправления и дополнения на протяжении многих лет.
АВТОР И АВТОРСКИЕ ПРАВА
Том Кристиансен написал оригинальный вариант этого документа. brian d foy <bdfoy@cpan.org> написал эту версию. См. отдельные документы perlfaq для дополнительной информации об авторских правах.
Этот документ доступен на тех же условиях, что и сам Perl. Примеры кода во всех документах perlfaq находятся в общественном достоянии. Используйте их по своему усмотрению (и на свой страх и риск без гарантий от кого-либо).
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.30.3/perlfaq