Это команда perlfaq3, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
perlfaq3 - Инструменты программирования
Версия
версия 5.021009
ОПИСАНИЕ
В этом разделе FAQ даны ответы на вопросы, связанные с инструментами программиста и программированием.
.
Как do I do (что-либо)?
Вы смотрели CPAN (см. Perlfaq2)? Скорее всего, кто-то уже написал
модуль, который может решить вашу проблему. Вы читали соответствующие руководства? Вот
краткий указатель:
Основная информация
perldata - типы данных Perl
perlvar - предопределенные переменные Perl
perlsyn - синтаксис Perl
perlop - операторы Perl и их приоритет
perlsub - подпрограммы Perl
Типы
perlrun - как запустить интерпретатор Perl
perldebug - Отладка Perl
функции
perlfunc - встроенные функции Perl
Объекты
perlref - ссылки Perl и вложенные структуры данных
perlmod - модули Perl (пакеты и таблицы символов)
perlobj - объекты Perl
perltie - как скрыть класс объекта в простой переменной
Структуры данных
perlref - ссылки Perl и вложенные структуры данных
perllol - Управление массивами массивов в Perl
perldsc - Поваренная книга по структурам данных Perl
Модули
perlmod - модули Perl (пакеты и таблицы символов)
perlmodlib - создание новых модулей Perl и поиск существующих
Регулярные выражения
perlre - Регулярные выражения Perl
perlfunc - Встроенные функции Perl>
perlop - операторы Perl и их приоритет
perllocale - обработка локали Perl (интернационализация и локализация)
Переход на perl5
perltrap - ловушки Perl для неосторожных
Perl
Связывание с C
perlxstut - Учебник по написанию XSUB
perlxs - справочное руководство по языку XS
perlcall - Соглашения о вызовах Perl из C
perlguts - Введение в Perl API
perlembed - как встроить Perl в вашу программу на C
Различный
<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> (не справочная страница, но все же полезная,
сборник различных эссе по техникам Perl)
Грубое оглавление набора man-страниц Perl можно найти в perltoc.
Как I использование Perl интерактивно?
Типичный подход использует отладчик Perl, описанный в перлдебаг(1) справочная страница на
«пустая» программа, например:
перл-де 42
Теперь просто введите любой допустимый код Perl, и он будет немедленно обработан. Вы также можете
изучить таблицу символов, получить трассировку стека, проверить значения переменных, установить точки останова,
и другие операции, обычно встречающиеся в символических отладчиках.
Вы также можете использовать Devel :: REPL, интерактивную оболочку для Perl, широко известную как
REPL - чтение, оценка, печать, цикл. Он предоставляет различные удобные функции.
Как do I найдите , которые модули установлен on my система?
В командной строке вы можете использовать переключатель «-l» команды «cpan»:
$ cpan -l
Вы также можете использовать переключатель «-a» в «cpan», чтобы создать файл автобандлинга, который будет «CPAN.pm»
понимает и может использовать для переустановки каждого модуля:
$ cpan -a
Внутри программы Perl вы можете использовать модуль ExtUtils :: Installed, чтобы показать все установленные
дистрибутивов, хотя на то, чтобы творить чудеса, может потребоваться время. Стандартная библиотека, которая
поставляется с Perl, просто отображается как «Perl» (хотя вы можете получить их с
Модуль :: CoreList).
используйте ExtUtils :: Installed;
мой $ inst = ExtUtils :: Installed-> new ();
мои @modules = $ inst-> modules ();
Если вам нужен список всех имен файлов модулей Perl, вы можете использовать File :: Find :: Rule:
используйте File :: Find :: Rule;
мой @files = File :: Find :: Rule->
дополнительные услуги ({follow => 1}) ->
файл () ->
имя ('* .pm') ->
в (@INC)
;
Если у вас нет этого модуля, вы можете сделать то же самое с File :: Find, который является частью
стандартная библиотека:
используйте File :: Find;
мои файлы;
найти(
{
хотел => sub {
нажмите @files, $ File :: Find :: fullname
если -f $ File :: Find :: fullname && /\.pm$/
},
следовать => 1,
follow_skip => 2,
},
@ИНК
);
печать соединения "\ n", @files;
Если вам просто нужно быстро проверить, доступен ли модуль, вы можете проверить его
документация. Если вы можете прочитать документацию, модуль, скорее всего, установлен. Если
вы не можете читать документацию, в модуле может не быть (в редких случаях):
Модуль $ perldoc :: Имя
Вы также можете попробовать включить модуль в однострочник, чтобы увидеть, найдет ли его Perl:
$ perl -MModule :: Имя -e1
(Если вы не получаете сообщение об ошибке «Не могу найти ... в @INC», значит, Perl обнаружил
имя модуля, которое вы просили.)
Как do I отлаживать my Perl программы?
(предоставлено brian d foy)
Прежде чем делать что-либо еще, вы можете помочь себе, убедившись, что Perl сообщит вам
о проблемных местах в вашем коде. Включив предупреждения и ограничения, вы можете избежать
много проблем, прежде чем они станут слишком большими. Вы можете узнать больше об этом в строгих и
предупреждения.
#!/ usr / bin / perl
использовать строго;
использовать предупреждения;
Кроме того, самый простой отладчик - это функция «печати». Используйте его, чтобы смотреть на значения как
вы запускаете свою программу:
print STDERR "Значение [$ value] \ n";
Модуль Data :: Dumper может красиво печатать структуры данных Perl:
используйте Data :: Dumper qw (Дампер);
print STDERR "Хеш есть". Дампер (\% хеш). "\ п";
Perl поставляется с интерактивным отладчиком, который можно запустить с помощью переключателя «-d». Это
полностью объяснено в perldebug.
Если вам нужен графический интерфейс и у вас есть Tk, вы можете использовать «ptkdb». Это на
CPAN и доступен бесплатно.
Если вам нужно что-то более сложное и управляемое, Devel Леона Брокарда :: ebug
(который вы можете вызвать с помощью переключателя "-D" как "-Debug") дает вам программные перехватчики
во все, что вам нужно, написать свое (без излишней боли и страданий).
Вы также можете использовать коммерческий отладчик, такой как Affrus (Mac OS X), Komodo от Activestate.
(Windows и Mac OS X) или EPIC (для большинства платформ).
Как do I профиль my Perl программы?
(предоставлено brian d foy, обновлено, пятница, 25 июля, 12:22:26 PDT, 2008 г.)
В пространстве имен «Devel» есть несколько модулей, которые вы можете использовать для профилирования ваших Perl-программ.
Devel :: NYTProf (New York Times Profiler) выполняет профилирование операторов и подпрограмм.
Он доступен из CPAN, и вы также вызываете его с помощью переключателя "-d":
perl -d: NYTProf some_perl.pl
Он создает базу данных профильной информации, которую вы можете превратить в отчеты. В
Команда «nytprofhtml» превращает данные в отчет HTML, аналогичный Devel :: Cover.
Доклад:
ньюпрофхтм
Вам также может быть интересно использовать Benchmark для измерения и сравнения фрагментов кода.
Вы можете узнать больше о профилировании в Программирование Perl, глава 20, или Освоение Perl,
Глава 5.
документы perldebguts, создающие настраиваемый отладчик, если вам нужно создать специальный вид
профайлер. Брайан Д Фой описывает процесс в Команда Perl журнал, "Создание Perl
Отладчик »,http://www.ddj.com/184404522> и «Профилирование в Perl»
<http://www.ddj.com/184404580>
На Perl.com есть две интересные статьи о профилировании: «Профилирование Perl» Саймона Козенса,
<http://www.perl.com/lpt/a/850> и «Отладка и профилирование приложений mod_perl», автор:
Фрэнк Уайлс,http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html>
Рэндал Л. Шварц пишет о профилировании в статье «Ускорение ваших программ на Perl» для Юникс
Обзор,http://www.stonehenge.com/merlyn/UnixReview/col49.html> и "Профилирование в
Template Toolkit через переопределение "для Linux Магазины,
<http://www.stonehenge.com/merlyn/LinuxMag/col75.html>
Как do I Перекрестная ссылка my Perl программы?
Модуль B :: Xref можно использовать для создания отчетов с перекрестными ссылками для программ Perl.
perl -MO = Xref [, ОПЦИИ] имя_сценария.plx
Is там a симпатичный принтер (форматтер) для Perl?
Perl :: Tidy поставляется с perl-скриптом perltidy, который делает отступы и переформатирует Perl-скрипты, чтобы
облегчить их чтение, стараясь следовать правилам стиля perl. Если вы напишете
Perl, или потратьте много времени на чтение Perl, вы, вероятно, найдете это полезным.
Конечно, если вы просто следуете рекомендациям в perlstyle, вам не нужно
переформатировать. Привычка форматировать код по мере его написания поможет предотвратить ошибки. Ваш
редактор может и должен вам в этом помочь. Perl-mode или более новый cperl-mode для emacs может
оказать значительную помощь с большей частью (но не со всем) кодом, и даже меньше
программируемые редакторы могут оказать существенную помощь. Том Кристиансен и многие другие
Пользователи VI придерживаются следующих настроек vi и его клонов:
установить ai sw = 4
карта! ^ O {^ M} ^ [O ^ T
Поместите это в свой .exrc файл (заменяя символы каретки на управляющие символы) и
прочь ты уходишь. В режиме вставки ^ T для отступа, ^ D для удаления отступа, а ^ O для
блокдентинг - как бы. Более полный пример с комментариями можно найти на
<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
Is там an IDE or Windows Perl Редактор?
Программы Perl представляют собой обычный текст, поэтому подойдет любой редактор.
Если вы используете Unix, у вас уже есть IDE - сама Unix. Философия Unix - это
философия нескольких небольших инструментов, каждый из которых выполняет одно задание и делает это хорошо. Это похоже на
ящик для инструментов плотника.
Если вам нужна IDE, проверьте следующее (в алфавитном порядке, а не в порядке предпочтения):
Затмение
<http://e-p-i-c.sf.net/>
Проект интеграции Eclipse Perl интегрирует редактирование / отладку Perl с Eclipse.
Инжинсайт
<http://www.enginsite.com/>
Perl Editor от EngInSite - это полная интегрированная среда разработки (IDE) для
создание, тестирование и отладка скриптов Perl; инструмент работает в Windows
9x / NT / 2000 / XP или новее.
Кефра
<http://kephra.sf.net>
Редактор графического интерфейса, написанный на Perl с использованием wxWidgets и Scintilla с множеством меньших
Особенности. Стремится к созданию пользовательского интерфейса, основанного на принципах Perl, таких как TIMTOWTDI и "простые вещи".
должно быть легко, сложные вещи должны быть возможны ».
Komodo
<http://www.ActiveState.com/Products/Komodo/>
Кроссплатформенность ActiveState (по состоянию на октябрь 2004 г., это Windows, Linux и Solaris),
многоязычная IDE имеет поддержку Perl, включая отладчик регулярных выражений и
удаленная отладка.
Notepad ++
<http://notepad-plus.sourceforge.net/>
Откройте Perl IDE
<http://open-perl-ide.sourceforge.net/>
Open Perl IDE - это интегрированная среда разработки для написания и отладки Perl.
скрипты с дистрибутивом ActiveState ActivePerl под Windows 95/98 / NT / 2000.
Оптиперл
<http://www.optiperl.com/>
OptiPerl - это Windows IDE с смоделированной средой CGI, включая отладчик и
редактор подсветки синтаксиса.
Отец
<http://padre.perlide.org/>
Padre - это кроссплатформенная IDE для Perl, написанная на Perl с использованием wxWidgets для обеспечения
родной внешний вид. Это открытый исходный код под лицензией Artistic License. Это один из
новые Perl IDE.
PerlBuilder
<http://www.solutionsoft.com/perl.htm>
PerlBuilder - это интегрированная среда разработки для Windows, поддерживающая Perl.
развития.
visiPerl +
<http://helpconsulting.net/visiperl/index.html>
Из Help Consulting для Windows.
Визуальный Perl
<http://www.activestate.com/Products/Visual_Perl/>
Visual Perl - это подключаемый модуль Visual Studio.NET от ActiveState.
Зевс
<http://www.zeusedit.com/lookmain.html>
Zeus для Windows - еще один многоязычный редактор / IDE Win32 с поддержкой
для Perl.
Для редакторов: если вы используете Unix, у вас, вероятно, уже есть vi или клон vi, и, возможно,
emacs тоже, поэтому вам может не понадобиться ничего скачивать. В любом emacs cperl-режим (Mx
cperl-mode) дает вам, пожалуй, лучший доступный режим редактирования Perl в любом редакторе.
Если вы используете Windows, вы можете использовать любой редактор, позволяющий работать с обычным текстом, например
как Блокнот или WordPad. Текстовые процессоры, такие как Microsoft Word или WordPerfect, обычно
не работают, так как вставляют всевозможную закулисную информацию, хотя некоторые
позволяют сохранять файлы как «Только текст». Вы также можете скачать разработанные текстовые редакторы
специально для программирования, например Textpad (http://www.textpad.com/>) и UltraEdit
(http://www.ultraedit.com/>) и другие.
Если вы используете MacOS, возникают те же проблемы. MacPerl (для классических сред) поставляется
с простым редактором. Популярными внешними редакторами являются BBEdit (
<http://www.barebones.com/products/bbedit/>) или Альфа (
<http://www.his.com/~jguyer/Alpha/Alpha8.html>). Пользователи MacOS X могут использовать редакторы Unix как
Что ж.
GNU Emacs
<http://www.gnu.org/software/emacs/windows/ntemacs.html>
МикроЭМАКС
<http://www.microemacs.de/>
XEmacs
<http://www.xemacs.org/Download/index.html>
Джедhttp://space.mit.edu/~davis/jed/>
или клон vi, такой как
Vimhttp://www.vim.org/>
Виллы
<http://dickey.his.com/vile/vile.html>
Ниже приведены многоязычные редакторы Win32 / IDE, поддерживающие Perl:
Мультиредактировать
<http://www.MultiEdit.com/>
SlickПравить
<http://www.slickedit.com/>
КОНТЕКСТ
<http://www.contexteditor.org/>
Также существует редактор на основе виджета Toyedit Text, написанный на Perl, который распространяется с
модуль Tk на CPAN. Ptkdb (http://ptkdb.sourceforge.net/>) основан на Perl / Tk
отладчик, который действует как своего рода среда разработки. Композитор Perl (
<http://perlcomposer.sourceforge.net/>) - это IDE для создания графического интерфейса Perl / Tk.
В дополнение к редактору / IDE вам может быть интересна более мощная среда оболочки
для Win32. Ваши варианты включают
колотить
из пакета Cygwin (http://cygwin.com/>)
zshhttp://www.zsh.org/>
Cygwin находится под лицензией GNU General Public License (но для Perl это не имеет значения.
использовать). Cygwin содержит (помимо оболочки) исчерпывающий набор стандартных Unix
инструментарий утилит.
BBEdit и TextWrangler
текстовые редакторы для OS X, которые имеют режим чувствительности Perl (
<http://www.barebones.com/>).
где I получить Perl Макрос для мы?
Полную версию файла конфигурации vi Тома Кристиансена см.
<http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz>, стандарт
тестовый файл для эмуляторов vi. Файл лучше всего работает с nvi, текущей версией vi.
из Беркли, который, кстати, может быть построен с помощью встроенного интерпретатора Perl - см.
<http://www.cpan.org/src/misc/>
где I получить Perl-режим or cperl-режим для эмакс?
Начиная с Emacs версии 19 patchlevel 22 или около того, были как perl-mode.el, так и
поддержка встроенного отладчика Perl. Они должны поставляться со стандартным Emacs 19
распределение.
Обратите внимание, что perl-режим emacs будет соответствовать "main'foo" (одинарная кавычка) и беспорядку
отступ и выделение. Вы, вероятно, используете main :: foo в новом коде Perl
в любом случае, это не должно быть проблемой.
Для CPerlMode см.http://www.emacswiki.org/cgi-bin/wiki/CPerlMode>
Как I использование проклятиями Perl?
Модуль Curses из CPAN предоставляет интерфейс динамически загружаемого объектного модуля для
библиотека проклятий. Небольшую демонстрацию можно найти в каталоге
<http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz>; эта программа повторяет
команда и обновляет экран по мере необходимости, рендеринг репутация ps аксу похож на топ.
Как I записывать a Графический интерфейс пользователя (ИКС, Тк, гтк, и т.д.) in Perl?
(предоставлено Беном Морроу)
Существует ряд модулей, позволяющих писать графические интерфейсы на Perl. Большинство наборов инструментов GUI имеют
интерфейс perl: следует неполный список.
Т.к. это работает под Unix и Windows, и текущая версия выглядит не так плохо
под виндой как раньше. Некоторые элементы графического интерфейса по-прежнему не кажутся правильными,
хотя. Интерфейс очень естественный и «перлиш», что делает его простым в использовании в небольших
скрипты, которым просто нужен простой графический интерфейс. Он давно не обновлялся.
Wx Это привязка Perl для кроссплатформенного инструментария wxWidgets (
<http://www.wxwidgets.org>). Он работает под Unix, Win32 и Mac OS X, используя собственный
виджеты (Gtk под Unix). Интерфейс полностью соответствует интерфейсу C ++, но
документация немного скудна для тех, кто не знаком с библиотекой, в основном просто
ссылаясь на документацию по C ++.
Gtk и Gtk2
Это привязки Perl для набора инструментов Gtk (http://www.gtk.org>). Интерфейс
значительно изменились между версиями 1 и 2, поэтому они имеют отдельные модули Perl. Это
работает под Unix, Win32 и Mac OS X (в настоящее время требуется X-сервер в Mac OS, но
«родной» порт находится в стадии разработки), и виджеты выглядят одинаково на всех платформах: т. е.
они не соответствуют родным виджетам. Как и в случае с Wx, привязки Perl следуют API C
внимательно, и документация требует, чтобы вы прочитали документацию C, чтобы понять
его.
Win32 :: GUI
Это обеспечивает доступ к большинству виджетов графического интерфейса Win32 из Perl. Очевидно, это только
работает под Win32 и использует собственные виджеты. Интерфейс Perl на самом деле не следует
интерфейс C: он был сделан на Perlish, и документация довольно хороша.
Для более сложных вещей может потребоваться знакомство с API-интерфейсами C Win32 или ссылка на
MSDN.
Верблюжьи кости
Верблюжьи кости (http://camelbones.sourceforge.net>) - это интерфейс Perl для Mac OS X
Инструментарий Cocoa GUI, и как таковой может использоваться для создания собственных графических интерфейсов пользователя в Mac OS X. Это
не на CPAN, так как для этого требуются фреймворки, которые CPAN.pm не умеет устанавливать, но
установка осуществляется через стандартный установщик пакетов OSX. Perl API, опять же, очень
рядом с ObjC API, который он обертывает, а документация просто говорит вам, как
переводить с одного на другой.
Qt Существует Perl-интерфейс для TrollTech's Qt toolkit, но, похоже, это не так.
поддерживается.
Афина
Sx - это интерфейс к набору виджетов Athena, который поставляется с X, но снова появляется
в настоящее время не используется.
Как I сделать my Perl программа пробег Быстрее?
Лучший способ сделать это - придумать лучший алгоритм. Это часто может сделать
резкая разница. Книга Джона Бентли Программирование Жемчуг (это не орфографическая ошибка!)
также есть несколько хороших советов по оптимизации. Совет по сравнительному анализу сводится к: контрольному показателю
и профиль, чтобы убедиться, что вы оптимизируете правильную часть, ищите лучшие алгоритмы
вместо микронастройки кода, а когда ничего не помогает, подумайте о том, чтобы покупать быстрее
аппаратное обеспечение. Возможно, вы захотите прочитать ответ на предыдущий вопрос: «Как мне
профилировать мои программы Perl? ", если вы еще этого не сделали.
Другой подход - автозагрузка редко используемого кода Perl. См. AutoSplit и
Для этого в стандартной поставке есть модули автозагрузчика. Или вы можете найти
узкое место и подумайте о том, чтобы написать именно эту часть в C, как мы привыкли
узкие места в коде C и напишите их на ассемблере. Подобно переписыванию на C, модули, которые
иметь критические секции можно написать на C (например, модуль PDL от CPAN).
Если в настоящее время вы привязываете исполняемый файл Perl к общему libc.so, вы часто можете получить
Повышение производительности на 10-25% за счет его перестройки для связывания со статической libc.a. Этот
сделает исполняемый файл Perl большего размера, но ваши Perl-программы (и программисты) могут вас благодарить
для этого. Увидеть УСТАНОВИТЬ файл в исходном дистрибутиве для получения дополнительной информации.
Программа undump была древней попыткой ускорить программу Perl, сохранив уже-
скомпилированная форма на диск. Это больше не жизнеспособный вариант, так как он работал только на нескольких
архитектур, и в любом случае не было хорошим решением.
Как I сделать my Perl программа взять Меньше Память?
Когда дело доходит до компромиссов между пространством и временем, Perl почти всегда предпочитает
проблема. Скаляры в Perl используют больше памяти, чем строки в C, массивы занимают больше,
а хеши используют еще больше. Хотя еще многое предстоит сделать, последние выпуски были
решение этих проблем. Например, начиная с версии 5.004, повторяющиеся хеш-ключи используются совместно
все хэши, использующие их, поэтому не требуют перераспределения.
В некоторых случаях использование substr () or vec () моделирование массивов может быть очень полезным. За
Например, массив из тысячи логических значений займет не менее 20,000 XNUMX байт пространства, но он
может быть преобразован в один 125-байтовый битовый вектор - значительная экономия памяти. Стандарт
Модуль Tie :: SubstrHash также может помочь для определенных типов структур данных. Если ты
работа со специализированными структурами данных (например, матрицами), модулями, реализующими
они в C могут использовать меньше памяти, чем эквивалентные модули Perl.
Еще одна вещь, которую нужно попробовать, - это узнать, был ли ваш Perl скомпилирован с помощью системного malloc или
с помощью встроенного в Perl malloc. Какой бы он ни был, попробуйте использовать другой и посмотрите,
это имеет значение. Информация о malloc находится в УСТАНОВИТЬ файл в источнике
распределение. Вы можете узнать, используете ли вы perl malloc, набрав «perl
-V: usemymalloc ".
Конечно, лучший способ сэкономить память - не тратить ее в первую очередь.
место. Хорошие практики программирования могут иметь большое значение для этого:
Не чавкай!
Не считывайте файл целиком в память, если вы можете обработать его построчно. Или больше
конкретно, используйте такой цикл:
#
# Хорошая идея
#
while (my $ line = <$ file_handle>) {
#...
}
вместо этого:
#
# Плохая идея
#
мои @data = <$ file_handle>;
foreach (@данные) {
#...
}
Когда файлы, которые вы обрабатываете, маленькие, не имеет большого значения, как вы это делаете.
это имеет огромное значение, когда они начинают расти.
Выборочно использовать map и grep
Помните, что и map, и grep ожидают аргумента LIST, поэтому делаем следующее:
@wanted = grep {/ pattern /} <$ file_handle>;
приведет к тому, что весь файл будет прихлебнут. Для больших файлов лучше зациклить:
while (<$ file_handle>) {
push (@wanted, $ _) если / шаблон /;
}
Избегайте ненужных кавычек и строк
Не цитируйте большие строки без крайней необходимости:
мой $ copy = "$ large_string";
делает 2 копии $ large_string (одну для $ copy и другую для кавычек), тогда как
моя $ копия = $ large_string;
делает только одну копию.
То же самое для строкового преобразования больших массивов:
{
местный $, = "\ п";
распечатать @big_array;
}
намного эффективнее с точки зрения памяти, чем любой
печать соединения "\ n", @big_array;
or
{
местный $ "=" \ п ";
печать "@big_array";
}
Пройти по ссылке
Передайте массивы и хэши по ссылке, а не по значению. Во-первых, это единственный способ
передать несколько списков или хэшей (или обоих) за один вызов / возврат. Это также позволяет избежать
создание копии всего содержимого. Однако это требует некоторого суждения, поскольку
любые изменения будут возвращены к исходным данным. Если вы действительно хотите покалечить
(э-э, изменить) копию, вам придется пожертвовать памятью, необходимой для ее создания.
Привяжите большие переменные к диску
Для «больших» хранилищ данных (то есть тех, которые превышают доступную память) рассмотрите возможность использования одного из
модули БД, чтобы хранить его на диске, а не в ОЗУ. Это повлечет за собой штраф в
время доступа, но это, вероятно, лучше, чем перегружать жесткий диск из-за
массовый обмен.
Is it безопасный в возвращают a ссылка в локальным or лексический данные?
да. Об этом позаботится система сборки мусора Perl, поэтому все работает правильно.
суб makeone {
мой @a = (1 .. 10);
return \ @a;
}
for (1 .. 10) {
нажмите @many, makeone ();
}
напечатайте $ many [4] [5], "\ n";
напечатать "@many \ n";
Как I бесплатно an массив or хэш so my программа сжимается?
(предоставлено Майклом Карманом)
Обычно вы не можете. Память, выделенная для лексических элементов (т. Е. мой() переменные) не могут быть восстановлены
или повторно использовать, даже если они выходят за рамки. Он зарезервирован на случай, если переменные вернутся.
в объем. Память, выделенная для глобальных переменных, может быть повторно использована (в вашей программе) с помощью
через undef () и / или удалять().
В большинстве операционных систем память, выделенная программе, никогда не может быть возвращена в
система. Вот почему долгоиграющие программы иногда повторяются. Некоторые действующие
системы (в частности, системы, использующие ММАП(2) для выделения больших блоков памяти) может
освободить память, которая больше не используется, но в таких системах необходимо настроить perl и
скомпилирован для использования malloc ОС, а не perl.
В общем, выделение и освобождение памяти - это не то, чем вы можете или должны быть.
беспокоиться о многом в Perl.
См. Также «Как сделать так, чтобы моя программа на Perl занимала меньше памяти?»
Как I сделать my CGI скрипт больше эффективный?
Помимо обычных мер, описанных для того, чтобы сделать общие программы Perl быстрее или меньше,
У программы CGI есть дополнительные проблемы. Он может запускаться несколько раз в секунду. Учитывая, что каждый
когда он запускается, его нужно будет перекомпилировать и часто будет выделять мегабайт или более
системная память, это может быть убийца. Компиляция в C Не будет в помощь поскольку
накладные расходы на запуск процесса - вот где узкое место.
Есть три популярных способа избежать этих накладных расходов. Одно из решений включает запуск
HTTP-сервер Apache (доступен сhttp://www.apache.org/>) с любым из mod_perl
или подключаемые модули mod_fastcgi.
С mod_perl и модулем Apache :: Registry (распространяется с mod_perl) httpd будет работать
со встроенным интерпретатором Perl, который предварительно компилирует ваш скрипт, а затем выполняет его
в том же адресном пространстве без разветвления. Расширение Apache также дает доступ к Perl
к внутреннему API сервера, поэтому модули, написанные на Perl, могут делать практически все, что угодно.
написано на C может. Подробнее о mod_perl см.http://perl.apache.org/>
С модулем FCGI (из CPAN) и модулем mod_fastcgi (доступным из
<http://www.fastcgi.com/>) каждая из ваших программ Perl становится постоянным демоном CGI
процесса.
Наконец, Plack - это модуль и инструментарий Perl, который содержит промежуточное ПО PSGI, помощники и
адаптеры к веб-серверам, позволяющие легко развертывать сценарии, которые могут продолжать работу,
и обеспечивает гибкость в зависимости от того, какой веб-сервер вы используете. Это может позволить существующим
Сценарии CGI, позволяющие добиться такой гибкости и производительности с минимальными изменениями, или их можно использовать
наряду с современными веб-фреймворками Perl для написания и развертывания веб-сервисов с помощью Perl
легкий ветерок.
Эти решения могут иметь далеко идущие последствия для вашей системы и того, как вы пишете
CGI-программы, поэтому внимательно изучайте их.
Смотрите такжеhttp://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/>
Как I скрывать источник для my Perl программы?
Удали это. :-) Если серьезно, есть ряд (в основном неудовлетворительных) решений с
различные уровни «безопасности».
Но прежде всего вы не может отнять разрешение на чтение, потому что исходный код должен
быть читаемым для компиляции и интерпретации. (Это не значит, что компьютерная графика
исходный код скрипта доступен для чтения людям в Интернете - только людям, имеющим доступ к
файловой системы.) Таким образом, вы должны оставить разрешения в социально дружественном 0755
уровень.
Некоторые считают это проблемой безопасности. Если ваша программа делает небезопасные вещи и
полагается на людей, не знающих, как использовать эти уязвимости, это небезопасно. это
часто кто-то может определить небезопасные вещи и использовать их без
просмотр источника. Безопасность через неизвестность, имя для сокрытия ваших ошибок вместо
их исправление - это действительно небольшая безопасность.
Вы можете попробовать использовать шифрование с помощью исходных фильтров (начиная с Perl 5.8, Filter :: Simple
и Filter :: Util :: Call модули входят в стандартный дистрибутив), но любые достойные
программист сможет его расшифровать. Вы можете попробовать использовать компилятор байтового кода и
интерпретатор, описанный позже в perlfaq3, но любопытные все еще могут декомпилировать
Это. Вы можете попробовать использовать компилятор машинного кода, описанный позже, но взломщики могут
разобрать его. Они создают разную степень сложности для людей, желающих получить
ваш код, но никто не может его окончательно скрыть (верно для всех языков, а не только для Perl).
Восстановить исходный код программ Perl очень просто. Вы просто скармливаете программу
интерпретатор perl и используйте модули в иерархии B ::. Модуль B :: Deparse должен быть
способен отразить большинство попыток скрыть источник. Опять же, это не уникальное свойство Perl.
Если вас беспокоит, что люди извлекают выгоду из вашего кода, то суть в том, что
только ограничительная лицензия не даст вам правовой защиты. Лицензируйте свое программное обеспечение и
приправьте его угрожающими заявлениями типа "Это неопубликованное проприетарное программное обеспечение
XYZ Corp. Ваш доступ к нему не дает вам разрешения на его использование, бла-бла-бла ».
конечно, не юристы, поэтому вам следует обратиться к юристу, если вы хотите быть уверенным, что
формулировка лицензии останется в силе в суде.
Как I компилировать my Perl программа в байт код or C?
(предоставлено brian d foy)
В общем, так нельзя. Есть кое-что, что может сработать в вашей ситуации
хотя. Люди обычно задают этот вопрос, потому что хотят распространять свои работы.
без разглашения исходного кода, и в большинстве решений дисковое пространство заменяется на удобство.
Вы, вероятно, также не увидите значительного увеличения скорости, поскольку большинство решений просто объединяют
интерпретатор Perl в конечном продукте (но см. «Как заставить мою программу Perl работать
Быстрее?").
Набор инструментов Perl Archive (http://par.perl.org/>) является аналогом JAR в Perl. Это
в свободном доступе и на CPAN (http://search.cpan.org/dist/PAR/>).
Есть также некоторые коммерческие продукты, которые могут вам подойти, хотя вам придется покупать
лицензия на них.
Комплект разработчика Perl (http://www.activestate.com/Products/Perl_Dev_Kit/>) из ActiveState
может "превратить ваши программы Perl в готовые к запуску исполняемые файлы для HP-UX, Linux, Solaris и
Windows. "
Perl2Exe (http://www.indigostar.com/perl2exe.htm>) - это программа командной строки для
преобразование скриптов Perl в исполняемые файлы. Он нацелен как на платформы Windows, так и на Unix.
Как I получить "#! perl" в работает on [MS-DOS, NT, ...]?
Для OS / 2 просто используйте
extproc perl -S -ваши_переключатели
как первая строка в файле "* .cmd" ("-S" из-за ошибки в обработке cmd.exe "extproc"). За
DOS следует сначала изобрести соответствующий командный файл и закодировать его в
«ALTERNATE_SHEBANG» (см. дош.ч файл в исходном дистрибутиве для получения дополнительной информации
Информация).
Установка Win95 / NT при использовании порта Perl ActiveState изменит
Реестр для связывания расширения ".pl" с интерпретатором perl. Если вы установите
другой порт, возможно, даже построение вашего собственного Win95 / NT Perl из стандартных источников с помощью
используя порт gcc для Windows (например, с cygwin или mingw32), вам придется изменить
Зарегистрируйтесь сами. Помимо связывания ".pl" с интерпретатором, NT-люди могут
используйте: «SET PATHEXT =% PATHEXT% ;. PL», чтобы позволить им запускать программу «install-linux.pl» просто
набрав "install-linux".
В «классической» MacOS у Perl-программы будут соответствующие Создатель и Тип, так что
двойной щелчок по ним вызовет приложение MacPerl. В Mac OS X интерактивные приложения
может быть составлен из любого символа "#!" скрипт с использованием утилиты Вила Санчеса DropScript:
<http://www.wsanchez.net/software/>
ВАЖНО!: Что бы вы ни делали, ПОЖАЛУЙСТА, не расстраивайтесь, а просто бросьте perl
интерпретатор в ваш каталог cgi-bin, чтобы ваши программы работали в сети
сервер. Это ЧРЕЗВЫЧАЙНО большая угроза безопасности. Найдите время, чтобы понять, как это сделать
правильно.
Может I записывать полезный Perl программы on команду линия?
да. Прочтите perlrun для получения дополнительной информации. Ниже приведены некоторые примеры. (Предполагается, что стандартный Unix
правила цитирования оболочки.)
# суммируем первое и последнее поля
perl -lane 'print $ F [0] + $ F [-1]' *
# определить текстовые файлы
perl -le 'для (@ARGV) {print if -f && -T _}' *
# удалить (большинство) комментариев из программы на C
perl -0777 -pe 's {/\*.*?\*/} {} gs' foo.c
# сделать файл на месяц моложе сегодняшнего, побеждая демонов-жнецов
perl -e '$ X = 24 * 60 * 60; utime (время (), время () + 30 * $ X, @ ARGV) '*
# найти первый неиспользованный uid
perl -le '$ i ++, а getpwuid ($ i); напечатать $ i '
# отображать разумный путь к мануалу
echo $ PATH | perl -nl -072 -e '
s! [^ / +] * $! man! && - d &&! $ s {$ _} ++ && push @ m, $ _; END {print "@m"} '
Хорошо, последний на самом деле был записью конкурса Obfuscated Perl Contest. :-)
почему не Perl однострочечники работает on my DOS / Mac / VMS система?
Проблема обычно в том, что командные интерпретаторы в этих системах имеют довольно
разные идеи о цитировании, чем оболочки Unix, в которых однострочники были
созданный. В некоторых системах вам может потребоваться заменить одинарные кавычки на двойные, что вы
должен НЕ делать в системах Unix или Plan9. Возможно, вам также придется изменить один% на %%.
Например:
# Unix (включая Mac OS X)
perl -e 'print "Привет, мир \ n"'
# DOS и т. Д.
perl -e "print \" Привет, мир \ n \ ""
# Мак Классик
print "Привет, мир \ n"
(затем запустите «Myscript» или Shift-Command-R)
# MPW
perl -e 'print "Привет, мир \ n"'
# ВМС
perl -e "print" "Привет, мир \ n" ""
Проблема в том, что ни один из этих примеров не является надежным: они зависят от команды
устный переводчик. В Unix первые два часто работают. Под DOS вполне возможно, что
ни то, ни другое не работает. Если бы 4DOS была командной оболочкой, вам, вероятно, повезло бы больше:
perl -e "печать "Привет, мир \ n ""
Под Mac это зависит от того, какую среду вы используете. Оболочка MacPerl или MPW - это
очень похож на оболочки Unix в поддержке нескольких вариантов цитирования, за исключением того, что он делает
бесплатное использование символов Mac, отличных от ASCII, в качестве управляющих символов.
. qq (), q () и qx ()вместо "двойных кавычек", "одинарных кавычек" и "обратных кавычек",
может упростить написание однострочных.
Для всего этого нет общего решения. Это бардак.
[Часть этого ответа принадлежит Кеннету Альбановски.]
где I изучить в отношении CGI or Сайт Программирование in Perl?
Для модулей получите модули CGI или LWP от CPAN. Для учебников см. Особенно
посвященный веб-материалам в вопросе о книгах. По проблемам и вопросам, связанным с
в Интернете, например "Почему я получаю 500 ошибок" или "Почему он не запускается из браузера, когда он
отлично работает в командной строке », см. руководства по устранению неполадок и ссылки в perlfaq9
или в CGI MetaFAQ:
L<http://www.perl.org/CGI_MetaFAQ.html>
Тем не менее, настоятельно рекомендуется обратить внимание на Plack и современные веб-фреймворки Perl; сеть
программирование на Perl далеко ушло от старых времен простых сценариев CGI.
где I изучить в отношении объектно-ориентированный Perl программирование?
Хорошее место для начала - perlootut, и вы можете использовать perlobj для справки.
Хорошая книга по объектно-ориентированному программированию на Perl - это "Object-Oriented Perl" Дэмиана Конвея из Manning.
Publications, или «Промежуточный Perl» Рэндала Шварца, Брайана Дфоя и Тома Феникса из
O'Reilly Media.
где I изучить в отношении связывающий C Perl?
Если вы хотите вызвать C из Perl, начните с perlxstut, переходя к perlxs, xsubpp и
перлгутс. Если вы хотите вызвать Perl из C, прочтите perlembed, perlcall и perlguts.
Не забывайте, что вы можете многому научиться, глядя на то, как авторы существующих
модули расширения написали свой код и решили свои проблемы.
Возможно, вам не понадобится вся мощь XS. Модуль Inline :: C позволяет напрямую размещать C-код
в вашем исходном коде Perl. Он обрабатывает всю магию, чтобы заставить его работать. Тебе все еще нужно учиться на
по крайней мере, некоторые из API Perl, но вам не придется иметь дело со сложностью XS
файлы поддержки.
У меня читать загадка, перлгутс, так далее., но I не может вставлять Perl in my C программа; почему am I дело
неправильно?
Загрузите комплект ExtUtils :: Embed с CPAN и запустите `make test '. Если тесты пройдены, прочтите
стручки снова и снова и снова. Если они потерпят неудачу, просмотрите perlbug и отправьте отчет об ошибке с помощью
вывод «make test TEST_VERBOSE = 1» вместе с «perl -V».
После появления I пыталась в пробег my сценарий, I есть этой сообщение. Что приносит it значит?
Полный список сообщений об ошибках и предупреждений Perl с пояснительным текстом можно найти
в перлдиаг. Вы также можете использовать программу splain (распространяется с Perl), чтобы объяснить
Сообщения об ошибках:
программа на Perl 2> diag.out
splain [-v] [-p] диаг.выход
или измените свою программу, чтобы объяснять вам сообщения:
использовать диагностику;
or
используйте диагностику -verbose;
какой Меймейкер?
(предоставлено brian d foy)
Модуль ExtUtils :: MakeMaker, более известный как MakeMaker, превращает Perl-скрипт,
обычно называется "Makefile.PL" в Makefile. Инструмент "make" Unix использует этот файл для
управлять зависимостями и действиями для обработки и установки дистрибутива Perl.
АВТОР И АВТОРСКИЕ ПРАВА
Авторские права (c) 1997-2010 Том Кристиансен, Натан Торкингтон и другие авторы, как указано.
Все права защищены.
Эта документация бесплатна; вы можете распространять и / или изменять его на тех же условиях
как сам Perl.
Независимо от распространения, все примеры кода здесь находятся в открытом доступе. Ты
разрешено и рекомендуется использовать этот код и любые его производные в ваших собственных программах
для развлечения или ради прибыли, как вы считаете нужным. Простой комментарий в коде, указывающий на
FAQ был бы вежливым, но не обязательным.
Используйте perlfaq3 онлайн с помощью сервисов onworks.net