Spec-Zone.ru › Perl 5.38

perlfaq

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • ВЕРСИЯ
  • ОПИСАНИЕ
    • Где найти perlfaq
    • Как использовать perlfaq
    • Как внести вклад в perlfaq
    • Что делать, если мой вопрос не решен в FAQ?
  • ТАБЛИЦА СОДЕРЖАНИЯ
  • ВОПРОСЫ
    • perlfaq1: Общие вопросы о Perl
    • perlfaq2: Получение и изучение Perl
    • perlfaq3: Средства разработки
    • perlfaq4: Обработка данных
    • perlfaq5: Файлы и форматы
    • perlfaq6: Регулярные выражения
    • perlfaq7: Общие вопросы о языке Perl
    • perlfaq8: Взаимодействие с системой
    • perlfaq9: Веб, электронная почта и сети
  • АВТОРСКИЕ ПРАВА
  • АВТОР И ПРАВА

НАЗВАНИЕ

perlfaq - Часто задаваемые вопросы о Perl

ВЕРСИЯ

версия 5.20210520

ОПИСАНИЕ

perlfaq состоит из нескольких документов, которые отвечают на самые часто задаваемые вопросы о Perl и программировании на Perl. Он разделен по темам на девять основных разделов, описанных в этом документе.

Где найти perlfaq

Perlfaq — это развивающийся документ. Читайте последнюю версию по адресу https://perldoc.perl.org/perlfaq. Он также включен в стандартную поставку 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.

После утверждения изменения будут распределены со следующим выпуском Perl и впоследствии появятся по адресу https://perldoc.perl.org/perlfaq.

Что делать, если мой вопрос не решен в 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 или Raku (Perl 6)?

  • Что такое Raku (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 для строки?

  • Как расширить переменные в текстовых строках?

  • Есть ли в Perl что-то подобное Ruby's #{} или Python's f-строке?

  • Что не так с постоянным цитированием "$переменные"?

  • Почему мои документы <<HERE не работают?

  • В чем разница между списком и массивом?

  • В чем разница между $array[1] и @array[1]?

  • Как удалить дублирующиеся элементы из списка или массива?

  • Как проверить, содержится ли определенный элемент в списке или массиве?

  • Как вычислить разницу между двумя массивами? Как вычислить пересечение двух массивов?

  • Как проверить, равны ли два массива или два хеша?

  • Как найти первый элемент массива, для которого выполняется условие?

  • Как обработать связанные списки?

  • Как обработать циклические списки?

  • Как случайным образом перемешать массив?

  • Как обработать/изменить каждый элемент массива?

  • Как выбрать случайный элемент из массива?

  • Как переставить N элементов списка?

  • Как отсортировать массив (по чему-либо)?

  • Как манипулировать массивами битов?

  • Почему defined() возвращает true для пустых массивов и хешей?

  • Как обработать весь хеш?

  • Как объединить два хеша?

  • Что происходит, если добавить или удалить ключи из хеша во время его обхода?

  • Как найти элемент хеша по значению?

  • Как узнать, сколько элементов в хеше?

  • Как отсортировать хеш (необязательно по значению, а не по ключу)?

  • Как всегда поддерживать сортировку хеша?

  • В чем разница между "delete" и "undef" в отношении хешей?

  • Почему мои привязанные хеши не делают различий между defined/exists?

  • Как перезапустить операцию each() на части пути?

  • Как получить уникальные ключи из двух хешей?

  • Как сохранить многомерный массив в файле DBM?

  • Как сделать так, чтобы мой хеш сохранял порядок элементов, в котором я их вставлял?

  • Почему передача подпрограмме неопределённого элемента в хеше создаёт его?

  • Как создать в Perl эквивалент структуры C/класса C++/хеша или массива хешей или массивов?

  • Как использовать ссылку в качестве ключа хеша?

  • Как проверить, существует ли ключ в многоуровневом хеше?

  • Как предотвратить добавление нежелательных ключей в хеш?

  • Как правильно обработать двоичные данные?

  • Как определить, является ли скаляр числом/целым/целым/вещественным?

  • Как сохранить данные между вызовами программы?

  • Как распечатать или скопировать рекурсивную структуру данных?

  • Как определить методы для каждого класса/объекта?

  • Как проверить контрольную сумму кредитной карты?

  • Как упаковать массивы двойных или плавающих чисел для кода XS?

perlfaq5: Файлы и форматы

Этот раздел посвящен вводу/выводу и проблемам с "f": дескрипторам файлов, сбросу буфера, форматам и подвалам.

  • Как сбросить/разомкнуть буфер файла-дескриптора вывода? Почему это нужно делать?

  • Как изменить, удалить или вставить строку в файл или добавить в начало файла?

  • Как подсчитать количество строк в файле?

  • Как удалить последние N строк из файла?

  • Как использовать опцию Perl -i внутри программы?

  • Как скопировать файл?

  • Как создать временное имя файла?

  • Как манипулировать файлами с фиксированной длиной записи?

  • Как сделать дескриптор файла локальным для подпрограммы? Как передавать дескрипторы файлов между подпрограммами? Как создать массив дескрипторов файлов?

  • Как использовать дескриптор файла косвенно?

  • Как открыть дескриптор файла для строки?

  • Как настроить формат подвала для использования с write()?

  • Как записать в строку с помощью write()?

  • Как вывести числа с запятыми?

  • Как заменить тильды (~) в имени файла?

  • Почему при открытии файла для чтения и записи он удаляется?

  • Почему иногда возникает ошибка "Список аргументов слишком длинный" при использовании <*>?

  • Как открыть файл, имя которого начинается с ">" или содержит хвостовые пробелы?

  • Как безопасно переименовать файл?

  • Как заблокировать файл?

  • Почему нельзя просто открыть(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 DFAs или NFAs? Они соответствуют стандарту POSIX?

  • Что не так с использованием grep в контексте ничего?

  • Как сопоставить строки с многобайтовыми символами?

  • Как сопоставить регулярное выражение, находящееся в переменной?

perlfaq7: Общие вопросы по языку Perl

Этот раздел посвящен общим проблемам языка Perl, которые не подходят четко ни к одному из других разделов.

  • Могу ли я получить BNF/yacc/RE для языка Perl?

  • Что значат все эти знаки препинания $@%&* и как я могу понять, когда их использовать?

  • Всегда ли мне нужно заключать строки в кавычки или использовать точки с запятой и запятые?

  • Как пропустить некоторые возвращаемые значения?

  • Как временно заблокировать предупреждения?

  • Что такое расширение?

  • Почему операторы Perl имеют разный приоритет, чем операторы C?

  • Как объявить/создать структуру?

  • Как создать модуль?

  • Как адаптировать или взять на себя уже существующий модуль на CPAN?

  • Как создать класс?

  • Как определить, является ли переменная заражённой?

  • Что такое замыкание?

  • Что такое самоубийство переменной и как его предотвратить?

  • Как передать/возвратить {Функцию, дескриптор файла, массив, хэш, метод, регулярное выражение}?

  • Как создать статическую переменную?

  • В чём разница между динамическим и лексическим (статическим) областями видимости? Между local() и my()?

  • Как получить доступ к динамической переменной, когда лексическая переменная с таким же именем находится в области видимости?

  • В чём разница между глубокой и мелкой привязкой?

  • Почему «my($foo) = <$fh>;» не работает правильно?

  • Как переопределить встроенную функцию, оператор или метод?

  • В чём разница между вызовом функции как &foo и foo()?

  • Как создать оператор switch или case?

  • Как перехватить обращения к неопределённым переменным, функциям или методам?

  • Почему метод, включённый в этот же файл, не может быть найден?

  • Как узнать текущий или вызывающий пакет?

  • Как закомментировать большой блок кода Perl?

  • Как очистить пакет?

  • Как использовать переменную в качестве имени переменной?

  • Что означает «плохой интерпретатор»?

  • Нужно ли перекомпилировать XS-модули, когда произошли изменения в библиотеке C?

perlfaq8: Взаимодействие с системой

Этот раздел Perl FAQ посвящён вопросам, связанным с взаимодействием с операционной системой. Тематика включает межпроцессное взаимодействие (IPC), управление пользовательским интерфейсом (клавиатура, экран и устройства указания) и всё остальное, что не связано с манипулированием данными.

  • Как узнать, на какой операционной системе я работаю?

  • Почему exec() не возвращает значение?

  • Как выполнять сложные действия с клавиатурой/экраном/мышью?

  • Как вывести текст в цвете?

  • Как прочитать только один символ с клавиатуры без ожидания нажатия клавиши ввода?

  • Как проверить, готов ли ввод с клавиатуры?

  • Как очистить экран?

  • Как получить размер экрана?

  • Как запросить у пользователя пароль?

  • Как читать и писать в последовательный порт?

  • Как декодировать зашифрованные файлы паролей?

  • Как запустить процесс в фоновом режиме?

  • Как перехватывать управляющие символы/сигналы?

  • Как изменить файл паролей shadow на Unix-системах?

  • Как установить время и дату?

  • Как заставить функцию sleep() или alarm() работать менее чем за секунду?

  • Как измерить время меньше секунды?

  • Как выполнить atexit() или setjmp()/longjmp()?(Обработка исключений)

  • Почему моя программа с сокетами не работает на системе System V (Solaris)? Что означает сообщение об ошибке «Протокол не поддерживается»?

  • Как вызвать уникальные функции C моей системы из Perl?

  • Где получить заголовочные файлы для ioctl() или syscall()?

  • Почему скрипты Perl с setuid жалуются на проблемы ядра?

  • Как открыть канал связи (pipe) как для ввода, так и для вывода в команду?

  • Почему я не могу получить вывод команды с помощью system()?

  • Как перехватить STDERR внешней команды?

  • Почему open() не возвращает ошибку при неудачном открытии канала связи?

  • Что не так с использованием обратных кавычек в пустом контексте?

  • Как вызвать обратные кавычки без обработки оболочки?

  • Почему мой скрипт не может читать со стандартного ввода после передачи ему EOF (^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-файл?

  • Как автоматизировать отправку формы HTML?

  • Как декодировать или создать %-кодировку в веб-среде?

  • Как перенаправить на другую страницу?

  • Как защитить свои веб-страницы паролем?

  • Как убедиться, что пользователи не могут вводить значения в форму, которые могут навредить моему CGI-скрипту?

  • Как разобрать заголовок письма?

  • Как проверить корректность адреса электронной почты?

  • Как декодировать строку MIME/BASE64?

  • Как найти адрес электронной почты пользователя?

  • Как отправить электронное письмо?

  • Как использовать MIME для добавления вложения к сообщению электронной почты?

  • Как прочитать электронное письмо?

  • Как узнать своё имя хоста, доменное имя или IP-адрес?

  • Как получить/записать файл (S)FTP?

  • Как выполнить удалённое процедурное вызов (RPC) в Perl?

АВТОРЫ

Оригинальный perlfaq написал Tom Christiansen, затем его расширил Nat Torkington. brian d foy существенно отредактировал и расширил perlfaq. perlfaq-workers и другие пользователи также предоставляли отзывы, исправления и корректировки на протяжении многих лет.

АВТОР И АВТОРСКИЕ ПРАВА

Оригинальную версию этого документа написал Tom Christiansen. brian d foy <bdfoy@cpan.org> написал эту версию. Дополнительная информация об авторских правах содержится в отдельных документах perlfaq.

Этот документ доступен на тех же условиях, что и Perl сам по себе. Примеры кода во всех документах perlfaq находятся в общественном достоянии. Используйте их по своему усмотрению (и на свой страх и риск без каких-либо гарантий от кого-либо).

© 1993–2023 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.38.0/perlfaq

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API