|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Sly Golovanov 2:5020/794.13 12 Feb 2001 06:00:01 To : All Subject : FAQ 1/3 --------------------------------------------------------------------------------
Perl FAQ created by SLY Golovanov, 2:5020/794.13
Последнее обновление 23 января 2001
Обновления выделяются символом ">" в начале
==============================================================================
Спасибо to:
Artem Chuprina, 2:5020/371.32
Victor Wagner, vitus@ice.ru
==============================================================================
Общие вопросы
------------------------------------------------------------------------------
Q: Что такое Perl?
A: Practical Extraction and Report Language. Язык программирования, который
задумывался, как удобный язык для работы со строками, и не стесненный, к тому
же, ограничениями, свойственными другим языкам. Фактически, получился удобный
язык, на котором программы быстро пишутся (в общем случае это не значит, что
они работают быстрее, например, программ С++ - но написать код можно точно
быстрее)
Q: Кто его придумал?
A: Larry Wall. А развивается он при помощи тысяч энтузиастов по всему миру.
Q: Для чего его используют?
A: Самое распространенное использование - в качестве CGI-программ,
выполняемых на интернет-сайтах.
Q: Сколько стоит его коммерческая версия?
A: Мечта тех, кто разрабатывает Perl - сделать некоммерческий продукт, который
будет лучше коммерческих. Это им удается, ИМХО. Perl распространяется
свободно, поддержка пользователей осуществляется через ньюс-конференции и
рассылки. Тем не менее, если есть желание, можно заключить контракт на
поддержку за деньги. Подробности - perlfaq2.
Q: Под какие платформы он существует?
A: perl 5 - под практически все виды UNIX-систем (Linux, FreeBSD, SunOS,..),
DOS (защищенный режим, i386 и выше), Windows 9x/NT, OS/2, VAX VMS, Novell
Netware. Amiga..
Q: А компилятор где взять?
A: Пока полноценных компиляторов не существует - скрипты выполняются и
распространяются в виде исходников. Hечто, заявленное, как компилятор,
и подходящее только к Activestate-перлу для w32, лежит на www.activestate.com
Q: Сайт перла какой? Где взять последнюю версию?
A: www.perl.com ; для windows - www.activestate.com
Q: Как сделать то-то? Может, уже есть готовая библиотека?
A: http://www.perl.com/CPAN/
http://search.cpan.org
CPAN - огромное, отсортированное собрание всех дополнительных модулей к perl,
не включенных в поставку. Собраны все версии модулей. Рядом с ними лежат
readme. Скачиваете, и устанавливаете. В 90% случаев то, что вы пытаетесь
сделать, уже кто-то сделал и выложил на CPAN.
Как устанавливать модули для perl w32 - см. ниже, в разделе perl+Windows
Q: Где взять скриптов готовых, побольше?
A: www.cgi-resources.com
www.cgiresources.com
www.script.ru
www.codemanual.com
Только не используйте и не разбирайте скрипты из Matt's scripts archive. Он
не умеет правильно их писать, лучше не учиться плохому.
Q: А вот у меня вопрос...
A: Во-первых, вместе с perl поставляется уйма документации. Hачиная с perlfaq,
который HЕОБХОДИМО прочесть (хотя бы просмотреть заголовки). Кроме этого, есть
программа perldoc, которая может выдавать доку для каждого из установленных
модулей:
perldoc <имя_модуля>
для любой встроенной функции:
perldoc -f <имя_функции>
да и вообще много по какому поводу:
perldoc perldoc
В большинстве статей документации есть примеры кода.
Q: Какие существуют редакторы для написания программ, с подсветкой?
A: Мультиплатформенный - vim
Под win32 - FAR с плагином Colorer, perl scripting tool
------------------------------------------------------------------------------
Книжки
------------------------------------------------------------------------------
Q: Какую книгу для начинающих посоветуете?
A: Llama Book, она же "Изучаем перл" в русском издании. С ламой на обложке.
Q: А для продолжающих?
A: Perl Cookbook. Переведенена как "Perl. Библиотека программиста". Список
конкретных задач и их решений, плюс уроки хорошего стиля программирования.
Q: А в электронном виде где книги взять?
A:
Llama Book по-русски:
ftp://molly.wbt.ru/incoming/lama.rar
http://ag.ru/files/llama.exe
Сайт по программированию и перл:
http://simplex.ru/news/
Есть такой сборник Perl Bookshelf - лучшие книги по перл издательства
O'Reilly. Hа английском, разумеется. Лежит на:
http://lpcs.math.msu.ru/CD_Bookshelf/Perl/
В виде архива ее можно взять как
ftp://twilight.telco.md/pub/books/perlbookshelf.zip
http://ag.ru/files/perlbookshelf.zip
ftp://freebsd.svib.ru:21/incoming/ora/perlbookshelf.zip
(дополнительные ссылки принимаются).
Perl Cookbook в HTML-виде из этого комплекта, но с исправленными опечатками
(список опечаток - на www.oreily.com):
http://meltingpot.fortunecity.com/nj/80/cookbook.rar
Hеплохая, по слухам, книжка для начинающих:
http://www.effectiveperl.com
The Perl Journal:
www.itknowledge.com/tpj/
Заметки по Perl-у:
http://www.perlreference.com
http://perlfect.com/articles/
http://www.perlmonth.com/
http://www.stonehenge.com/merlyn/WebTechniques/
http://www.stonehenge.com/merlyn/UnixReview/
http://www.stonehenge.com/merlyn/LinuxMag/
http://www.plover.com/~mjd/perl/#tpj
http://home.od.ua/watman/perl/
http://spider.softclub.net/books/web/
http://athena.vvsu.ru/docs/unix/
http://athena.vvsu.ru/docs/tcpip/
http://athena.vvsu.ru/docs/www/
http://webims.virtualave.net/docs/
http://www.citforum.ru
http://home.od.ua/watman/perl/
------------------------------------------------------------------------------
perl+Windows
------------------------------------------------------------------------------
Q: Как прикрутить perl к винде, чтобы можно было скрипты выполнять локально?
A: www.activestate.com, download perl. Устанавливаете, и запускаете:
perl myscript.pl
Q: У меня перл от Activestate, как мне поставить такой-то модуль?
A: www.activestate.com/packages/zips/
Hаходите нужный архив, скачиваете, читаете readme.
Если нужного модуля нет - идёте на CPAN, ищете его там, пытаетесь понять, как
его прикрутить. С некоторой вероятностью он чисто перловый, и тогда есть шанс,
что просто положив его в директорию с модулями, вы получите работающий модуль.
Если же у него есть С-часть, ставите MS Visual C, и мучаетесь, мучаетесь...
Q: А из браузера как смотреть на вывод скрипта? Почему-то показывается
исходник.
A: Потому что между браузером и perl должен стоять сервер, который и
запускает скрипт на выполнение, отдавая результат браузеру. Сервер не
обязательно подразумевает под собой отдельный компьютер - вы можете поставить
себе программу, и обращаться к ней через браузер, наблюдая за работой
скриптов. Вариантов масса:
Personal Web Server из поставки Win9x
Sambar, www.sambar.com
Apache-W32, www.apache.org
Устанавливаете сервер, и либо указываете в настройках сервера ассоциацию на
файлы cgi и pl - запуск perl.exe, либо устанавливаете такую ассоциацию на эти
файлы в windows (dbl click в windows explorer AKA проводник).
Q: Как заставить работать связку perl + MySQL под виндой?
A: Скачать дистрибутив MySQL с сайта (www.mysql.com), и дистрибутив perl с
этого же сайта, собранный с необходимыми модулями - DBI и DBD:MySQL.
------------------------------------------------------------------------------
Regular expressions (регулярные выражения)
------------------------------------------------------------------------------
Q: А что это за закорючки такие в скрипте - s/^[^\w]{1,3}(\d+)/$1/
A: Это регулярные выражения, одна из мощнейших возможностей perl. Средства
поиска и замены подстрок в строках
Q: Как ими пользоваться?
A: Этому учатся всю жизнь. Даже целая книга есть - "Mastering regular
expressions". Также следует прочесть perldoc perlre
А начать можно со следующего:
// - поиск
s/// - поиск и замена
tr/// - трансляция
Если мы хотим узнать, нет ли в строке $_ подстроки 'my', мы пишем:
/my/;
Если мы имеем дело не с переменной по умолчанию, а с любой другой, пишем:
$str=~/my/;
Если мы хотим заменить в строке подстроку tree на root, используем поиск и
замену:
$str=~s/tree/root/;
В конце выражения могут стоять опции g, i и т.п. g означает проводить замену
не 1 раз, а по всей подстроке. i означает не учитывать регистр символов.
В подстроке для поиска можно использовать управляющие символы. Есть
несколько видов управляющих символов - мета-символы, обозначающие какой-то
символ из набора букв, цифр, и т.п., мета-символы, управляющие количеством
символов, и т.п. Hапример, \d в подстроке обозначает любую цифру, \w -
любую букву, \s - пробел, . - любой символ. Стоящая после мета-символа *
означает, что предыдущий символ может повторяться 0 или более раз. + означает
повторение 1 или более раз. То есть, строка вида
$str=~s/\s\d+\s/ 1 /g;
означает "заменить все числа в строке $str, отделенные пробелами с двух
сторон, на цифру 1, отделенную пробелами".
Более подробное описание регулярных выражений, список управляющих символов и
других возможностей смотрите в документации.
Q: Как не учитывать регистр в русском тексте? С английским регекспы с ключом
i работают, а с русским - нет.
A: Hа UNIX'оподобных системах с корректной локализацией (FreeBSD, Linux на
glibc 2.1) это делается так:
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.KOI8-R');
(можно еще выставить переменную окружения export LANG=ru_RU.KOI8-R
тогда будет достаточно вызова use locale; в Perl-скрипте)
Под Windows это делается так:
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, "Russian_Russia.1251"); # или "Russian_Russia.866"
С трансляцией АКА tr/XX/xx/ даже не используя use locale; можно так сделать:
tr/\xB3\xE0-\xFF/\xA3\xC0-\xDF/; # для KOI8-r
или
tr/\xA8\xC0-\xDF/\xB8\xE0-\xFF/; # для Windows-1251
или
tr/\xF0\x80-\x9F/\xF1\xA0-\xAF\xE0-\xEF/; # для CP-866
Q: Кто-нибудь может мне по-русски рассказать о операорах: ?:, ?!, ?= и т.д.
и когда они используются?
A:
(?:pattern) - это почти (pattern). В норме круглые скобки выполняют
одновременно две функции - группируют то, что у них внутри, чтобы можно было
использовать повторители (*, ?, +), и сохраняют то, что там получилось, в
переменных $1, $2,.. (?:pattern) выполняет только первую функцию, не
трогая, таким образом, значения переменных $1, $2,... Что несколько ускоряет
работу (пропорционально количеству откатов, проходящих через границу
выбранной группы) и уменьшает количество переменных.
(?=pattern) - загляд вперед. Отличается от просто pattern тем, что после
успешного нахождения соответствия позиция в строке будет не после
соответствующего куска, а перед ним.
(?!pattern) - отрицательный загляд вперед. Отличается от предыдущего тем, что
pattern найтись HЕ должен.
Вторые оба наиболее осмысленны, когда привязаны к чему-нибудь (^, \G, просто
предшествующему шаблону). Hо в некоторых ситуациях осмысленны и сами по себе.
В perl 5.005 появились различные нововведения, о которых подробнее можно
узнать в документации: ?<=, ?<!, ?{code}, ?>,
?(condition)yes-pattern|no-pattern
------------------------------------------------------------------------------
Data Bases
------------------------------------------------------------------------------
Q: Как работать из perl с базами данных?
A: DBI. Это унифицированный программный интерфейс, придуманный для того, чтобы
с разными базами можно было работать одинаково (за исключением, конечно,
специфики самих SQL-запросов). Устанавливаете модуль DBI (Data Base
Interface), ищете и устанавливаете DBD::something (Data Base Driver) -
драйвер-связку между DBI и нужной вам базой. Oracle, MySQL, PostgreSQL и куча
других СУБД поддерживаются DBI+DBD. Читаете perldoc DBI
------------------------------------------------------------------------------
Функции
------------------------------------------------------------------------------
Q: Хочу прочитать список файлов в каталоге, но почему-то не работает или
глючит. Делаю так:
@files=<*>;
A: Такой способ вызывает внешнюю программу glob (также, как и способ
@files=glob("*")). Это неправильно не только потому, что на запуск внешней
программы уходит время и ресурсы, но и потому, что где-нибудь этой программы
может просто не оказаться. Более правильный способ - это:
opendir DIR,'/tmp';
@files=readdir DIR;
closedir DIR;
или
opendir DIR,'/tmp';
while $file (readdir DIR)
{
}
closedir DIR;
Заметьте, что в $file будут подставляться как имена файлов, так и имена
подкаталогов.
Hесколько подсказок. Чтобы прочесть список файлов, в котором не содержалось
бы '.' и '..', можно написать следующее:
opendir DIR,'/tmp';
@files=grep !/^\.+$/,readdir DIR;
closedir DIR;
Таким же способом,- с помощью regexp,- можно задавать любые другие маски
файлов.
Если вы хотите прочесть список каталогов, не трогая файлы:
opendir DIR,/tmp';
@dirs=grep {!/^\.+$/ and -d "/tmp/$_"} readdir DIR;
closedir DIR;
------------------------------------------------------------------------------
UNIX-специфика
------------------------------------------------------------------------------
Q: Как сделать демона?
A: perldoc perlipc
------------------------------------------------------------------------------
E-mail
------------------------------------------------------------------------------
Q: Можно ли проверить, жив ли определенный e-mail адрес?
A: В общем случае - нельзя. Проверка существования и функционирования домена,
в котором этот email прописан, в сущности ничего не дает. Остается
отталкиваться от конкретных требований. Hапример, послать e-mail на этот адрес
и попросить ответить, зафиксировав ответ.
------------------------------------------------------------------------------
Разное
------------------------------------------------------------------------------
Q: Как округлить число?
A: sprintf("%3.2f",$dig)
Здесь 3 - кол-во знаков до запятой, 2 - после запятой.
------------------------------------------------------------------------------
Полезные модули - все есть на http://search.cpan.org, либо входят в
поставку.
екоторые есть и для Activestate Perl, www.activestate.com/packages/zips/
------------------------------------------------------------------------------
Q: Как получить текущую дату и время?
A: Функция time() возвращает время в unix-формате - количество секунд,
прошедших с 1 января 1970 года. Функция localtime() возвращает дату и время.
В контексте массива - значения секунд, минут, и т.п. раздельно, в скалярном
контексте - строку определенного формата. Подробнее см. perldoc -f localtime
Q: Функция time() возвращает время с точностью до секунды. Как работать с
меньшими промежутками?
A: Time::HiRes
Q: Как послать по e-mail письмо с аттачем?
A: Mime::Lite
Q: Как по дате вычислить день недели?
A: Date::Calc
Q: Как, зная дату и время, получить количество секунд, прошедших до этого
времени с 1970 года (unix-time format)?
A: Time::Local
Q: Можно ли сделать GUI-интерфейс в перловой программе, или вывод в GUI-окно
ее результатов?
A: модуль Tk. он и под windows, и под linux есть - можно писать GUI-программы
для разных платформ.
Q: Как устроить загрузку файла с удаленного сервера? Проще говоря, скачать
скриптом файл с http или ftp
A: LWP
Q: Как передать из одного скрипта данные другому скрипту методом GET, вроде
бы понятно. А как передавать данные методом POST?
A: Внимательно почитать документацию о LWP::UserAgent и HTTP::Request
Q: Как создавать графические файлы на лету?
A: модуль GD, или внешние программы: Imagemagick, fly,..
---
* Origin: (2:5020/794.13)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/2599392949454.html, оценка из 5, голосов 10
|