1_0_1.gif 1_2_1.gif
 
FAQ по Java
FAQ по CGI и Perl
FAQ по халяве в интернете
FAQ по взлому
 
 
 
 

Общие вопросы

Вопрос: Что такое Perl?
Ответ : Practical Extraction and Report Language. Язык программирования, который задумывался, как удобный язык для работы со строками, и не стесненный, к тому же, ограничениями, свойственными другим языкам. Фактически, получился удобный язык, на котором программы быстро пишутся (в общем случае это не значит, что они работают быстрее, например, программ С++ - но написать код можно точно быстрее).

Вопрос: Кто его придумал?
Ответ : Larry Wall. А развивается он при помощи тысяч энтузиастов по всему миру.

Вопрос: Для чего его используют?
Ответ : Самое распространенное использование - в качестве CGI-программ, выполняемых на интернет-сайтах.

Вопрос: Сколько стоит его коммерческая версия?
Ответ : Мечта тех, кто разрабатывает Perl - сделать некоммерческий продукт, который будет лучше коммерческих. Это им удается, ИМХО. Perl распространяется свободно, поддержка пользователей осуществляется через ньюс-конференции и рассылки. Тем не менее, если есть желание, можно заключить контракт на поддержку за деньги. Подробности - perlfaq2.

Вопрос: Под какие платформы он существует?
Ответ : perl 5 - под практически все виды UNIX-систем (Linux, FreeBSD, SunOS,..), DOS (защищенный режим, i386 и выше), Windows 9x/NT, OS/2, VAX VMS, Novell Netware, Amiga.

Вопрос: А компилятор где взять?
Ответ : Пока полноценных компиляторов не существует - скрипты выполняются и распространяются в виде исходников. Hечто, заявленное, как компилятор, и подходящее только к Activestate-перлу для w32, лежит на www.activestate.com

Вопрос: Сайт перла какой? Где взять последнюю версию?
Ответ : www.perl.com

Вопрос: Как сделать то-то? Может, уже есть готовая библиотека?
Ответ : http://www.perl.com/CPAN/ , http://search.cpan.org
CPAN - огромное, отсортированное собрание всех дополнительных модулей к perl, не включенных в поставку. Собраны все версии модулей. Рядом с ними лежат readme. Скачиваете, и устанавливаете. В 90% случаев то, что вы пытаетесь сделать, уже кто-то сделал и выложил на CPAN. Как устанавливать модули для perl w32 - см. ниже, в разделе perl+Windows

Вопрос: Где взять скриптов готовых, побольше?
Ответ : www.cgi-resources.com
www.cgiresources.com
www.script.ru
www.codemanual.com
Только не используйте и не разбирайте скрипты из Matt's scripts archive. Он не умеет правильно их писать, лучше не учиться плохому.

Вопрос: А вот у меня вопрос...
Ответ : Во-первых, вместе с perl поставляется уйма документации. Hачиная с perlfaq, который HЕОБХОДИМО прочесть (хотя бы просмотреть заголовки). Кроме этого, есть программа perldoc, которая может выдавать доку для каждого из установленных модулей:

perldoc <имя_модуля>

для любой встроенной функции:
perldoc -f <имя_функции>

да и вообще много по какому поводу:
perldoc perldoc

В большинстве статей документации есть примеры кода.

Вопрос: Какие существуют редакторы для написания программ, с подсветкой?
Ответ : Мультиплатформенный - vim Под win32 - FAR с плагином Colorer, perl sctipring tool

Книжки

Вопрос: Какую книгу для начинающих посоветуете?
Ответ : Llama Book, она же "Изучаем перл" в русском издании. С ламой на обложке.

Вопрос: А в электронном виде где книги взять?
Ответ : 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://solaris.inorg.chem.msu.ru/cs-books/perl/perlbookshelf.zip
http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2
ftp://twilight.telco.md/pub/books/perlbookshelf.zip
(дополнительные ссылки принимаются).
Perl Cookbook в HTML-виде из этого комплекта, но с исправленными опечатками (список опечаток - на www.oreily.com):
http://meltingpot.fortunecity.com/nj/80/cookbook.rar
Hеплохая, по слухам, книжка для начинающих:
http://www.effectiveperl.com
Заметки по 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:85/docs/unix/
http://athena.vvsu.ru:85/docs/tcpip/
http://athena.vvsu.ru:85/docs/www/

perl+Windows

Вопрос: Как прикрутить perl к винде, чтобы можно было скрипты выполнять локально?
Ответ : www.activestate.com, download perl. Устанавливаете, и запускаете:
perl myscript.pl

Вопрос: У меня перл от Activestate, как мне поставить такой-то модуль?
Ответ : www.activestate.com/packages/zips/
Hаходите нужный архив, скачиваете, читаете readme. Если нужного модуля нет - ставите MS Visual C, и мучаетесь, мучаетесь..

Вопрос: А из браузера как смотреть на вывод скрипта? Почему-то показывается исходник.
Ответ : Потому что между браузером и perl должен стоять сервер, который и запускает скрипт на выполнение, отдавая результат браузеру. Сервер не обязательно подразумевает под собой отдельный компьютер - вы можете поставить себе программу, и обращаться к ней через браузер, наблюдая за работой скриптов. Вариантов масса:
Personal Web Server из поставки Win9x
Sambar, www.sambar.com
Apache-W32, www.apache.org
Устанавливаете сервер, и либо указываете в настройках сервера ассоциацию на файлы cgi и pl - запуск perl.exe, либо устанавливаете такую ассоциацию на эти файлы в windows (dbl click в windows explorer AKA проводник).

Regular expressions
(регулярные выражения)

Вопрос: А что это за закорючки такие в скрипте -
s/^[^\w]{1,3}(\d+)/$1/
Ответ : Это регулярные выражения, одна из мощнейших возможностей perl. Средства поиска и замены подстрок в строках

Вопрос: Как ими пользоваться?
Ответ : Этому учатся всю жизнь. Даже целая книга есть - "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, отделенную пробелами".
Более подробное описание регулярных выражений, список управляющих символов и других возможностей смотрите в документации.

Вопрос: Как не учитывать регистр в русском тексте? С английским регекспы с ключом i работают, а с русским - нет.
Ответ : Hа Linux-е это делается так:

    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

Data Bases

Вопрос: Как работать из perl с базами данных?
Ответ : DBI. Это унифицированный программный интерфейс, придуманный для того, чтобы с разными базами можно было работать одинаково (за исключением, конечно, специфики самих SQL-запросов). Устанавливаете модуль DBI, ищете и устанавливаете DBD - драйвер-связку между DBI и нужной вам базой. Orcale, MySQL, Postgres и куча других СУБД поддерживаются DBI+DBD. Читаете perldoc DBI.

Функции

Вопрос: Хочу прочитать список файлов в каталоге, но почему-то не работает или глючит. Делаю так: @files=<*>;
Ответ : Такой способ вызывает внешнюю программу glob (также, как и способ @files=glob("*")). Это неправильно не только потому, что на запуск внешней программы уходит время и ресурсы, но и потому, что где-нибудь этой программы может просто не оказаться. Более правильный способ - это:

   opendir DIR,'/tmp';
   @files=readdir DIR;
   closedir DIR;

или 

   opendir DIR,'/tmp';
   while $file (readdir DIR)
   {
   }
   closedir DIR;

Заметьте, что в $file будут подставляться как имена файлов, так и имена подкаталогов. Несколько подсказок. Чтобы прочесть список файлов, в котором не содержалось бы '.' и '..', можно написать следующее:

   opendir DIR,'/tmp';
   @files=grep !/^\.+$/,readdir DIR;
   closedir DIR;

Таким же способом,- с помощью regexp,- можно задавать любые другие маски файлов. Если вы хотите прочесть список каталогов, не трогая файлы:

   opendir DIR,/tmp';
   @dirs=grep {!/^\.+$/ and -d "/tmp/$_"} readdir DIR;
   closedir DIR;

Назад        Дальше

 
Сайт создан в системе uCoz