|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sly Golovanov 2:5020/794.13 13 Nov 2000 06:00:04 To : All Subject : FAQ 1/3 -------------------------------------------------------------------------------- Perl FAQ created by SLY Golovanov, 2:5020/794.13 Последнее обновление 19 августа 2000 Обновления выделяются символом ">" в начале ============================================================================== Спасибо 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 по-русски: http://doc.marsu.ru/lang/perl/lama/ ftp://mshp.minsk.by/pub/incoming/lama.rar ftp://ftp.kursknet.ru/pub/books/lama_perl.zip ftp://molly.wbt.ru/incoming/lama.rar Сайт по программированию и перл: http://simplex.ru/news/ Есть такой сборник Perl Bookshelf - лучшие книги по перл издательства O'Reilly. Hа английском, разумеется. Лежит на: http://lpcs.math.msu.ru/CD_Bookshelf/Perl/ В виде архива ее можно взять как http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2 ftp://twilight.telco.md/pub/books/perlbookshelf.zip http://solaris.inorg.chem.msu.ru/cs-books/perl/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/\s1\s/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.perl/2599389352a9d.html, оценка из 5, голосов 10
|