Збірник поширених питань по мові PERL і програмування для WEB

Павло Аммосов, http://vg.pp.ru

Надсилайте також свої власні відповіді! Особливо, про можливість використання Perl на платформах microsoft, тому я до них доступу не маю, а питання зустрічаються досить часто.
Інформація про те як і куди надсилати відповіді – у кінці збірника.

Загальний план

Частина A. Перл як мову
Частина B. Перл як засіб для роботи з CGI
Частина C. 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/ – Там беруть все, пов’язане з перлом. Власне исходники новітньої версії перла беруть з файлу http://www.perl.com/CPAN/src/latest.tar.gz (Насправді з www.perl.comварто редирект на найближчий, на думку www.perl.com, mirror).

(Q 1.2) Де можна перл під вінди (OS / 2, Mac, PDP, amiga) злити?
(A) Там же, де і під UNIX, тобто на CPAN, тільки не в src /, а в ports /. Наприклад, порти перла для платформи win32 лежать в http://www.perl.com/CPAN/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 присвячена сторінка http://www.iis.ee.ethz.ch/~neeri/macintosh.html 

Для 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. Повний список всіх модулів і бібліотек – http://www.cpan.org/CPAN.html 

(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 Посилання та покажчики на дані
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. Почитати їх можна на http://w3.stonehenge.com:80/merlyn/UnixReview/  

Чому я вважаю це кращим введенням в перл? Тому що це окремі невеликі статті, кожна з яких ілюструє конкретні можливості перла на прикладі написання програми для достатньо простої задачі. Все ж статті охоплюють практично весь спектр можливостей перла – від написання скрипта в один рядок, який може поміняти Іванов на Сидоров у всіх файлах в дереві деректор, до основ об’єктно-орієнтованого програмування та принципів створення власних модулів і бібліотек.

(Q 2.8) А де можна знайти російську доку по Перл?

(A) Якщо немає можливості купити в магазині, тобто дещо і в Інтернеті: книга Маслова “Введення в перл”, наприклад. http://citforum.ru/koi/internet/perl_tut/ Є й інші, особливо хороших не бачив.

* * *

(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, http://www.sendmail.org

У мене не 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 = ;

= ‘Хо-Хо’;

[Вперед]

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*