Web - кодинг: Perl:


FAQ по Perl



  Источник:

  • (1) Где взять перл и все с ним связанное
  • (Q 1.1) Где можно взять перл?
  • (Q 1.2) Где можно перл под винды (OS/2, Mac, PDP, amiga) слить?
  • (Q 1.3) Где можно скачать перловскую библиотеку для работы с WWW?
  • (Q 1.4) C www.cpan.org слишком долго качается, нет ли где поближе?
  • (Q 1.5) Я скачал модуль Lib::Module. Как его установить?
  • (Q 1.6) Как автоматизировать процесс установки библиотек и модулей?
  • (Q 1.7) У меня нет root-привилегий. Можно ли использовать модуль CPAN для установки модулей в этом случае?
  • (2) Где взять документацию по перлу
  • (Q 2.1) Какие есть книжки про Перл?
  • (Q 2.2) Где взять стандартную документацию про такое-то свойство перла?
  • (Q 2.3) Я под виндами, man у меня нет, где брать стандартную документацию?
  • (Q 2.4) Где взять описание модуля Lib::Module?
  • (Q 2.5) Есть ли подробный большой FAQ по перлу?
  • (Q 2.6) Я крутой разработчик, где лежит описание того, как сделать perldoc/manpage к своей библиотеке?
  • (Q 2.7) А есть ли где в интернете хорошие доки по перлу?
  • (Q 2.8) А где можно найти русскую доку по перлу?
  • (3) Как сделать на перле то-то (основные возможности языка)
  • (Q 3.1) Как пользоваться функцией pack (getpwuid, dmbopen)?
  • (Q 3.2) Как узнать размер файла (дату создания, атрибуты, разрешения на доступ)?
  • (Q 3.3) Как отправить почту из скрипта на Perl?
  • (Q 3.4) Как отправить почту с вложениями (attachments)?
  • (Q 3.5) ! Как определить правильность адреса электронной почты Internet?
  • (Q 3.6) Как написать модуль?
  • (Q 3.7) ! Как получить доступ к n-му сиволу строки?



    (1) Где взять перл и все с ним связанное


    (Q 1.1) Где можно взять перл?


    (A) На CPAN == Comprehensive Perl Archive Network. Homepage CPAN -- http://www.cpan.org/ -- там берут все, связанное с перлом. Собственно исходники новейшей версии перла берут из файла (на самом деле с www.perl.com стоит редирект на ближайший, по мнению www.perl.com, mirror).


    (Q 1.2) Где можно перл под винды (OS/2, Mac, PDP, amiga) слить?


    (A) Там же, где и под UNIX, то есть на CPAN, только не в src/, а в ports/. Например, порты перла для платформы win32 лежат в . Там лежат два порта: стандартный (GURUSAMY-порт) и порт фирмы ActiveState (обычно устаревшие версии перла).


    Gurusamy (он же Standard) содержит исходники Perl 5.005, бинарный
    дистрибутив Perl 5.004 и ряд библиотек для него.
      perl5.00402-bindist04-bc.zip
      perl5.00402-bindist04-bc.tar.gz
          A popular binary distribution of Perl for the Win32 platform...
      perl5.005_52.patch.gz
      perl5.005_52.tar.gz
          Latest development release of Perl.  This is only for developers
    	  and others who like to sit on bleeding edges (pun irrelevant)...
    Каталог ActiveState на CPAN уже ничего не содержит, кроме рекомендации
    искать их порт на www.activestate.com.
    ActivePerl основан на 5.005.
    из README для Active Perl:
      The ActivePerl package contains all you'll need to get Perl up and
      running -- even with a Web server!
      ActivePerl includes:
      - Perl for Win32 - binary of core Perl distribution.
      - Perl for ISAPI - IIS plug-in that makes Perl CGI lightning fast.
            - PerlScript - ActiveX scripting engine, like JavaScript or
    		VBScript with a Perl brain.
      - Perl Package Manager - Perl extension installer and manager.
    Perl на Apple Macintosh посвящена страница
    Для Netware Perl дают на /CPAN/ports/netware. Кроме того, perl входит в
    поставку Netware 5.
    Для мейнфреймов IBM System/390 perl 5.005 компилируется прямо из
    стандартной unix поставки.
    Для IBM AS/400 Perl можно взять опять-таки на CPAN в каталоге ports.
    Для pdp-11 есть perl1.010, но url уже никто не помнит.
    

    (Q 1.3) Где можно скачать перловскую библиотеку для работы с WWW?


    (A) Там же, где и все, относящееся к перлу -- на CPAN. Полный список всех модулей и библиотек --


    (Q 1.4) C www.cpan.org слишком долго качается, нет ли где поближе?


    (A) Есть. Полный список зеркал находится в ftp://ftp.nluug.nl/pub/languages/perl/CPAN/MIRRORED.BY, там можно найти funet или что там поближе, или даже российские зеркала, например ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/ (иногда в дауне).


    (Q 1.5) Я скачал модуль Lib::Module. Как его установить?


    (A) Обычно модуль приходит в формате tar+gzip, типа module-0.01.tar.gz.
    Вам необходимо его развернуть:
      gzip -dc module-0.01.tar.gz | tar xf -
    и перейти в образовавшуюся директорию, например module-0.01:
      cd module-0.01
    Обычно там находятся несколько файлов. Для вас будут важными
    следующие:
      README    - что это за модуль
      INSTALL    - как его поставить
      Makefile.PL  - перловый скрипт для генерации Makefile
    Обычно инсталляция происходит следующим образом:
      perl Makefile.PL - генерация Makefile
      make all  - сборка модуля
      make test  - тестирование модуля
      make install  - инсталляция модуля
    Необходимо внимательно смотреть, не возникли ли какие ошибки во время
    первых трех команд. Внимание: вы должны иметь административные
    привелегии для инсталлирование модуля в системе (обычно как root).
    Но, если вы их не имеете, то можете инсталлировать модуль у себя.
    Для этого вам необходимо выбрать, где это будет делаться. Для примера,
    в $HOME/lib/perl5. Необходимо создать эти директории, если их нет:
      mkdir ~/lib
      mkdir ~/lib/perl5
    Затем, при генерации Makefile для модуля, вы должны указать, где вы
    хотите инсталлировать модуль:
      perl Makefile prefix=$HOME
    Все остальные шаги без изменений. В результате вы получите
    альтернативное место, где у вас будут находиться модули.
    Например, у меня это выглядит так:
      artur@disco:~ (681) ls -alFg ~/lib/perl5/
      total 704
      drwxr-sr-x   8 artur    staff        512 Oct 06 15:53 ./
      drwxr-sr-x   9 artur    staff       1024 Oct 08 10:50 ../
      drwxr-sr-x   4 artur    staff        512 Mar 31 1998  aix/
      drwxr-sr-x   2 artur    staff        512 Aug 06 13:40 CPAN/
      -r--r--r--   1 artur    staff     126951 Jul 24 19:37 CPAN.pm
      drwxr-sr-x   3 artur    staff        512 Mar 31 1998  man/
      drwxr-sr-x  31 artur    staff       1024 Sep 09 15:41 site_perl/
    Для того, чтобы их использовать, есть несколько путей:
    1. указывать при запуске perl в командной строке:
      perl -I$HOME/lib/perl5 -I$HOME/lib/perl5/site_perl script.pl
    2. завести переменную шелла PERL5LIB:
      для sh (bash,zsh,ksh)
      PERL5LIB=$HOME/lib/perl5:$HOME/lib/perl5/site_perl
      export PERL5LIB
      для csh (tcsh)
      setenv PERL5LIB $HOME/lib/perl5:$HOME/lib/perl5/site_perl
    3. указывать в начале скриптов дополнительные библиотеки:
      use lib "/home/you/lib/perl5";
      use lib "/home/you/lib/perl5/site_perl";
    Данный случай подходит к CGI-скриптам, которые не наследуют ваших
    переменных окружения.
    

    (Q 1.6) Как автоматизировать процесс установки библиотек и модулей?


    (A) Скачивание и установка вручную -- достаточно сложное занятие, требующее постоянного вмешательства с вашей стороны. Можно простым способом: сделать su (желательно), набрать perl -MCPAN -e shell. Если это первый запуск модуля CPAN, вам задатут серию вопросов на тему URL вашего любимого зеркала CPAN. После этого все просто: если вы знаете название модуля или библиотеки, то набираете, скажем, install Net::NNTP. Тогда этот модуль (для работы с NNTP) сам ищется на CPAN, сам скачивается, компилируется, устанавливается. Все, поставили, можно выходить и использовать вновь установленный модуль. Если название точно не известно, то набираем там же help и испльзуем различные команды поиска типа i NNTP.


    (Q 1.7) У меня нет root-привилегий. Можно ли использовать модульCPAN для установки модулей в этом случае?


    (A) При использовании CPAN-модуля вам необходимо сконфигурировать его
    таким образом, чтобы он сам инсталлировал модули туда, куда вы
    укажете. Для этого вам необходимо подредактировать файл
    ~/.cpan/CPAN/MyConfig.pm: указать в строке
      'makepl_arg' => q[prefix=/home/you],
    и теперь всегда при автоматической инсталляции модули будут ставится к
    вам в $HOME/lib/perl5
    Более подробно обо всем этом можно прочитать в документации к
    ExtUtils::MakeMaker.
    * * *
    


    (2) Где взять документацию по перлу



    (Q 2.1) Какие есть книжки про Перл?


    (A) Две классические книги по перлу, первая имеется в русском переводе и
    продается в магазинах:
       Рандал Шварц, Том Кристиансен. 
       Изучаем перл (aka Llama book)
       
       Лэрри Уолл, Том Кристиансен, Рандал Шварц. 
       Programming Perl (aka Camel book, на русском, кажется, еще нет)
    Llama book - учебник для начинающих,
    Camel book - справочное руководство.
    

    (Q 2.2) Где взять стандартную документацию про такое-то свойство перла?


    (A) Перл приходит с полным набором документации и набором программ
    для переведения в разные форматы. Обычно для подробного ознакомления с
    некоторой особенностью перла пишут "perldoc perlсвойство" или "man
    perlсвойство".  Базовый набор "свойств" таков:
         Основы          perldata, perlvar, perlsyn, perlop, perlsub
         Запуск          perlrun, perldebug
         Функции         perlfunc
         Objects         perlref, perlmod, perlobj, perltie
         Data Structures perlref, perllol, perldsc
         Modules         perlmod, perlmodlib, perlsub
         Regexps         perlre, perlfunc, perlop, perllocale
         Moving to perl5 perltrap, perl
         Linking w/C     perlxstut, perlxs, perlcall, perlguts, perlembed
         Various         http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html
                         (not a man-page but still useful)
         perl          О перле вообще
         perldelta     Что нового в последней версии перла
         perlfaq       FAQ
         perltoc       Подробное оглавление ко всей документации
         perldata      Типы данных
         perlsyn       Синтаксис языка
         perlop        Арифметические, логические, строковые 
                         операции и их приоритет
         perlre        Регулярные выражения (обработка текста и поиск)
         perlrun       Опции командной строки
         perlfunc      Встроенные функции
         perlvar       Специальные переменные
         perlsub       Как писать свои функции (процедуры)
         perlmod       Устройство и принцип работы модулей
         perlmodlib    Модули: создание собственных библиотек
         perlmodinstall Поиск и установка модулей и библиотек на CPAN
         perlform      "Форматы", или шаблоны для выводимых данных
         perllocale    Поддержка интернационализации
         perlref       Ccылки и указатели на данные
         perldsc       Введение в структурные типы данных
         perllol       Структуры данных: массивы и списки 
         perltoot      Введение в объектно-ориентированное
                         программирование
         perlobj       Объекты в перле
         perltie       Связь объектов с обыкновенными переменными
         perlbot       Perl OO tricks and examples
         perlipc       Связь между процессами: pipes, sockets, 
                         сигналы и др.
         perldebug     Отладка программ
         perldiag      Сообщения об ошибках
         perlsec       Вопросы безопасности
         F
         perltrap      Возможные грабли и ловушки
         perlport      Как писать портабельные программы
         perlstyle     Стиль программирования на перле
         perlpod       Формат стандартной документации и документация, 
                         встраиваемая в исходные тексты программ
         perlbook      О книгах про перл
         --- (для совсем крутых) ---
         
         perlembed     Способы внедрения перл-программ в программы на C/C++
         perlapio      Собственный API, использумый в исходниках перла
         perlxs        XS -- программирование перловских библиотек,
                         используемых вместе с библиотеками на C
         perlxstut     Учебник по XS
         perlguts      Внутренние функции перла для разработчиков
         perlcall      Соглашения о вызове перловских функций из C
         perlhist      История и полный список всех версий перла
    

    (Q 2.3) Я под виндами, man у меня нет, где брать стандартнуюдокументацию?


    (A) Перл для win32 поставляется с программой perldoc (пользоваться: "perldoc perlfunc" и т. д.) а также с документациией в HTML: если хочешь perldoc perlfunc, ищи perlfunc.html.


    (Q 2.4) Где взять описание модуля Lib::Module?


    (A) Формат стандартной документации по перлу (pod) обладает возможностью встраивания прямо в тексты программ, а программа perldoc -- возможностью извлечения этой документации. Поэтому, чтобы получить документацию по модулю Math::Trig, просто наберите perldoc Math::Trig -- perldoc найдет этот модуль и покажет документацию из него. Если модуль не является частью какой-то библиотеки, а существует сам по себе, например, CGI.pm тогда просто perldoc CGI.pm или даже perldoc CGI. NB: программа perldoc не очень расторопна, поэтому при установке перла под UNIX производится создание manpages для всех модулей, так что man CGI или man Math::Trig покажет быстрее, чем perldoc.


    (Q 2.5) Есть ли подробный большой FAQ по перлу?


    (A) Да, он тоже входит в набор стандартной документации. Отправная точка -- perldoc perlfaq, это оглавление, из которого можно узнать, что FAQ состоит из девяти больших частей.


    (Q 2.6) Я крутой разработчик, где лежит описание того, как сделатьperldoc/manpage к своей библиотеке?


    (A) Про это говорят в perldoc perlpod, в man pod2man.


    (Q 2.7) А есть ли где в интернете хорошие доки по перлу?


    (A) Да. На мой взгляд, серия статей Рандала Шварца для Unix Review Perl Columns -- лучшее введение в перл, и намного интереснее и полезнее книг Llama и Camel. Почитать их можно на
    Почему я считаю это лучшим введением в перл? Потому что это отдельные небольшие статьи, каждая из которых иллюстрирует конкретные возможности перла на примере написания программы для достаточно простой задачи. Все же статьи охватывают практически весь спектр возможностей перла -- от написания скрипта в одну строку, который может поменять Иванов на Сидоров во всех файлах в дереве деректорий, до основ объектно-ориентированного программирования и принципов создания собственных модулей и библиотек.


    (Q 2.8) А где можно найти русскую доку по перлу?


    (A) Если нет возможности купить в магазине, то есть кое-что и в Интернете: книга маслова "Введение в перл", например. Есть и другие, особо хороших не видел.



    * * *

    (3) Как сделать на перле то-то (основные возможности языка)



    (Q 3.1) Как пользоваться функцией pack (getpwuid, dmbopen)?


    (A) man perlfunc или "perldoc -f имя_функции | pod2text"
    Пара примеров для unpack:
    Определение типа изображения и его размеров:
    sub get_image_spec {
            # Возвращает ($Тип_изображения, $ширина, $высота)
            my $buf = $_[0];
            my ($type, $width, $height);
            if (unpack("n", $buf) == 0xffd8) {
                    return ('jpeg', 0, 0); # Про jpeg я пока не знаю как
                    # определить его размеры
            } elsif (unpack("A4", $buf) eq "GIF8") {
                    my ($type, $width, $height) = unpack("A6 v v", $buf);
                    return ('gif', $width, $height);
            }
    }
    read(STDIN, $buf, 120);
    print join (", ", get_image_spec($buf));
    

    (Q 3.2) Как узнать размер файла (дату создания, атрибуты, разрешения надоступ)?


    (
    A) С помощью так называемых файловых тестов, которые имеют вид
    (-тест "имя файла"), например:
        (-s "file.txt") размер файла
        -e              существует ли файл
        -w              доступен ли на запись
        -M              количество дней со дня модификации
        -t              является ли терминалом
    

    (Q 3.3) Как отправить почту из скрипта на Perl?


    (A)
            Способ для Unix oт Alex Efros
            ---- 
            open MAIL, '|/path/to/your/sendmail -t'; # Pipe к sendmail
            print MAIL "From: mailrobot@my.host\n",
                       "To: webmaster@my.host\n",
                       "Subject: Wow! I got some mail for you!!!\n\n",
                        $message;
            close MAIL;
            -----
            Подробности: man sendmail,
    
            
            У меня не Unix! Что делать?
            Вероятно, Вам поможет модуль Net::SMTP
    

    (Q 3.4) Как отправить почту с вложениями (attachments)?(A)


    Возьмите на CPAN модуль MIME::Tools и прочтите от него README. (MIME-tools.xxxxx.tar.gz)

    (Q 3.5) ! Как определить правильность адреса электронной почты Internet?(A)


    Гарантированно -- никак. Вы можете проверить адрес на правильность синтаксиса при помощи регулярного выражения, те, чтобы адрес соответствовал некоторому образцу (В rfc823 приведены BNF'ы правильных адресов, также доступно монстрообразное регулярное выражение для проверки e-mail от автора книги "Mastering Regular Expressions" где-то XXX) , Вы также можете проверить существование этого домена. И все. Если Вам нужен гарантированно правильный e-mail для web-сайта, Вы можете воспользоваться методом от Алексея Тутубалина: требовать пароль для доступа к информации, а сам пароль высылать по электронной почте. Тогда человек должен будет указать свой e-mail, конечно же, если ему интересна эта информация с вашего сайта.


    (Q 3.6) Как написать модуль?(A)


    Простейший случай:
    Сам модуль представляет из себя файл с именем MyModule.pm следуещего
    содержания:
    package MyModule;
    require Exporter;
    @ISA = qw(Exporter);
    @EXPORT = qw(идентификаторы для экспорта: подпрограммы, имена
    переменных и пр.);
    # Теперь после того, как вы напишите use MyModule в своей программе,
    # у вас все упомянутые здесь идентификаторы станут видны. Этот метод
    # не рекомендуется, так как вы "засоряете" именное пространство программы.
    # И/или
    @EXPORT_OK = qw(идентификаторы для экспорта: подпрограммы, имена переменных и
    пр.);
    # Идентификаторы, прописанные здесь будут видны в Вашей пргорамме как
    # MyModule::Идентификатор (подпрограммы) или $MyModule::Идетификатор
    # (переменные)
    # Или, Вы можете написать use MyModule qw(Ид1 Ид2 $Ид3); и все будет как в
    # первом случае. Это рекомендуемый вариант.
    ... ваши подпрограммы и пр ....
    1; # Обязательно
    # конец МойМодуль
    Программа, его используящая: 
    use MyModule qw(...);
    # Ну и далеее
    Подробности смотрите в perlmod(1), Exporter(3pm), Camel Book
    

    (Q 3.7) ! Как получить доступ к n-му сиволу строки?(A)


    Надо использовать функцию substr. Например, получить 15й символ из
            строки $string:
            $char = ;
            Установить 15й символ строки $string:
             = 'A';
            Можно даже использовать болле чем односимвольные последовательности:
            $ss = ;
             = 'Хо-Хо';
    





  • При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

    © 2005
     

    Hosted by uCoz