Софт-Портал

Perl windows

Рейтинг: 4.6/5.0 (1216 проголосовавших)

Категория: Windows: ASP, PHP, Perl, CGI

Описание

Perl windows

Прекрасный язык CGI-программирования Perl, к сожалению, почти вытеснен PHP. Тем не менее, ничего красивее и удобнее для обработки строк и текстовых файлов я не знаю по сей день, и иногда проще "реанимировать" старый скрипт, чем делать то же самое средствами PHP или других языков. С помощью этой небольшой статьи Вы сможете скачать, установить и настроить Perl на локальной Windows-машине (на момент написания статьи это была Windows XP, но, думаю, всё будет работать и в более новых версиях), а также решить типичные проблемы, связанные с закачкой Perl-скриптов на хостинг.

1. Во-первых, нужно иметь установленный локальный сервер под Windows (можно, разумеется, установить Apache, но мне обычно хватало Internet Information Services - встроенного в Windows локального сервера). О том, как установить IIS, читайте в этой статье.

2. После установки IIS скачаем и установим Active Perl под Windows, надёжнее всего это сделать с официальной страницы: http://www.activestate.com/activeperl/. размер архива до 20 Мб. Во избежание проблем ставьте Perl в корень диска c: или d. так, чтобы его папкой стала c:\Perl ( d:\Perl ).

3. Привяжем к IIS типы файлов Perl'а. Для этого зайдём Пуск, Администрирование, Internet Information Services (или Пуск, Выполнить, %SystemRoot%\system32\inetsrv\iis.msc. если вдруг нет такого меню), раскроем список Web-служб локального компьютера до уровня локального Web-сервера, нажмём на нём правую кнопку мыши и выберем "Свойства" (см. рис.)

В окне "Свойства" на вкладке "Документы" нажимаем кнопку "Добавить" и добавляем в список имён документов по умолчанию (опция "Задать документ, используемый по умолчанию" включена) имя index.pl. На вкладке "Домашний каталог" проверяем, что в списке "Разрешен запуск:" выбран пункт "Сценарии и исполняемые файлы", нажимаем кнопку "Настройка" в окне "Настройка приложения" делаем следующие добавления в список "Сопоставление приложений":

Исполняемый файл: c:\Perl\bin\perl.exe "%s" %s

Расширение. pl

Команды (сократить до): GET,HEAD,POST (можно оставить и "все команды")

Включена опция "Проверка наличия файла".

Аналогично для расширения .plx можно сделать отдельную запись, назначив исполняемым файлом строку c:\Perl\bin\perlis.dll. Хотя я ставил это и на расширение .pl. всё равно всё работало.

Для надёжности можно перезапустить сервер IIS (из меню, показанного на рисунке выше, выбрать "Остановить", затем "Пуск").

4. Проверим работу на тестовом файле. В папке C:\Inetpub\wwwroot\ (корень нашего Web-сервера) создадим файл с именем test.pl и следующим содержимым:

В адресной строке браузера выполним http://127.0.0.1/test.pl

На экране строка Hello, Perl. Поздравляю, всё работает. Если что-то не так - во-первых, разбираемся с правами на файлы (в той же статье п. 3-5), во-вторых, проверяем, разрешает ли IIS выполнение файлов в корне сервера (помните, выше мы выбирали пункт "Сценарии и исполняемые файлы"?), в-третьих смотрим, нет ли ошибки в пути к интерпретатору Перла (назначение на тип файла .pl).

Разумется, скрипты можно размещать в любых папках, вложенных в wwwroot. тогда в пути к скрипту на локалхосте добавится путь по дереву папок, начиная с корня сервера - например, http://127.0.0.1/cgi-bin/test2.pl для скрипта test2.pl. расположенного локально в папке C:\Inetpub\wwwroot\cgi-bin (по умолчанию серверные скрипты, кстати, должны располагаться как раз в ней).

Типовые проблемы с Perl-скриптами на хостинге

Предполагается, что Вы закачиваете скрипты на сервер Интернет через службу передачи файлов FTP любым FTP-клиентом, имеющим необходимый минимум настроек. Мне лично в большинстве случаев хватает клиента, встроенного в Far Manager. поэтому скажу несколько слов о работе с FTP его средствами. Нажимаем Alt+F1 или Alt+F2. выбираем под списком дисков FTP. Если нужного соединения в панели ещё нет, создаём его нажатием Shift+F4. Обычно достаточно ввести в первое поле окна "Ввод адреса FTP" строку вида ftp://пользователь:пароль@сервер:порт/папка. например, ftp://misha314:pg0_xE1@ftp.narod.ru для пользователя сервиса Народ.Ру с логином misha314 и паролем pg0_xE1. Платные хостинги тем более обычно предоставляют данные для доступа к FTP. Для многих серверов также нужно выставить опции "Пассивный режим", в целях безопасности рекомендуется также "Использовать Firewall", "Расширенное окно команд" включено по умолчанию, так что пусть так и будет. Введя данные, нажимаем "Сохранить" и соединение сохраняется в панели. Перейдя по его ссылке, теперь мы можем закачивать файлы на сервер, создавать там папки и менять права доступа к этим объектам. Как раз последний шаг обычно создаёт проблемы, давайте вкратце обсудим, как меняются и что означают эти самые права. Для смены прав в панели FTP Far Manager'а выделите нужные файлы клавишей Ins и нажмите Ctrl+A. Появится окно как на рисунке:

Права доступа к файлам действуют во всех нормальных операционных системах (я не про Windows, а про Unix-совместимые системы, которые обычно стоят на серверах Интернет, куда Вы закачиваете файлы) и разделяются на три категории:
  • права владельца файла (u);
  • права группы (g);
  • права всех остальных пользователей (o).

Именно в этом порядке на рисунке показаны 3 группы переключателей.

В каждой категории можно установить или снять 3 вида прав:
  • R - право на чтение;
  • W - право на запись;
  • X - право на исполнение.
Права доступа обозначаются так же цифрами:
  • 4 - читать (R),
  • 2 - записывать (W),
  • 1 - исполнять (X),
  • 0 - ничего нельзя делать.
На самом деле это не просто цифры, а двоичные коды комбинаций RWX. но для простоты сойдёт и так. Сумма этих цифр и показывает права доступа. Вот основные варианты:
  • 7 = 4 + 2 +1 (полные права, все чекбоксы включены),
  • 6 = 4 + 2 (чтение и запись, включены R, W, выключен X),
  • 5 = 4 + 1 (чтение и выполнение, включены R, X, выключен W),
  • 4 = 4 + 0 + 0 (только чтение),

и т.д. для каждой из 3 категорий. В итоге получается, что права 777 обозначают, что и владелец, и группа пользователей, к которой он относится, и любой сторонний пользователь имеют полный доступ к этим файлам. Как в Windows с правами администратора. Поэтому ни один нормальный скрипт таких прав не потребует. А требуется обычно 755 (положение переключателей XXX X0X X0X ) для папок и исполняемых файлов, в том числе, скриптов с расширением .pl. и 644 ( X0X X00 X00 ) или 744 ( XXX X00 X00 ) для всех остальных файлов. Теперь, надеюсь, Вы сможете понять фразу "поставить права 755". Кстати, какие права на рисунке? Правильно, 644.

Итак, всё, что потребуется - создать подключение FTP, закачать в нужную папку (хостер обычно сообщает, какую, а корневая папка Вашего сервера уже создана) файлы с расширением .pl. поставить на них и вложенные папки права 755, на прочие файлы - 644 и набарть URL-адрес нужной страницы? Как бы ни так. Есть ещё куча нюансов, ради них-то я и начал этот раздел.

1. Закачивать файлы с расширением .pl следует только как текстовые (включить флажок "Текстовый режим" окна "Передача файлов" Far Manager'а). Иначе рискуете получить внутреннюю ошибку сервера с кодом 500. Дело в том, что в Windows и DOS в конец каждой строки текстового файла добавляется по 2 символа - CR (возврат каретки, код символа 13) и LF (перевод строки, код 10), а в Unix-совместимых системах строка заканчивается единственным символом с кодом 10. Вариант передачи "Текстовый режим" как и раз и убирает лишние символы CR в конце строк. На самом деле мешает символ 13 только в конце первой строки Perl-скрипта -

Эта строка обозначает путь к интерпретатору Perl, на Windows-машине она ничего не делает, а вот при размещении на сервере необходима. Если файл не передан как текстовый, интерпретатор Перла просто воспринимает код 13 как часть пути и не может запустить скрипт. Думаю, не надо пояснять, что бинарные файлы (картинки, базы данных, видео и т.п.) ни в коем случае нельзя закачивать как текст - Вы просто испортите файл.

2. Кстати, эта строка не обязана быть такой как выше. На конкретном хосте может быть и

и что-нибудь ещё. Поэтому, если скрипт не работает, во вторую очередь уточните по документации или у админа путь к интерпретатору Перла.

3. Третье - проверьте права на файлы, как рассказано выше. На многих хостингах просто отключены из соображений безопасности права 777, а разрешено только 755 и т.д.

4. Perl-скрипт должен полностью формировать документ HTML вместе с HTTP-заголовками. В простом переводе это означает, что первой в теле скрипта должна печататься оператором print или echo строка

- именно так, с двумя переводами строки \n в конце.

5. Ошибку сервера 500 с сообщением в логе вроде "Premature end of script headers" может породить и синтаксическая неточность где-нибудь глубоко в недрах скрипта. Я, например, однажды бился часа 2, пока не нашёл примерно в 1000-й строке текста конструкцию вида

вместо требуемой правилами языка

- фигурные скобки в if оказались обязательны. после этого "мёртвый" скрипт заработал безупречно.

6. Многие скрипты имеют в отдельном файле с именем вроде config.pl или просто в начале текста настройки вида

Для работы скрипта обычно нужно корректно их установить. Если помнить, что в Unix, в отличие от Windows, в записи путей используется прямой слэш /. а не обратный \. обычно это не так сложно. Тем более, что авторы снабжают настройки комментариями. Всё, что следует после символа "решётки" # до конца строки и есть комментарий.

7. Кстати, при отладке чужих, да и своих скриптов, бывает нужно закомментарить сразу многострочный кусок кода. В стандарте Perl такой возможности, как многострочные комментарии, нет, но на самом деле почти везде работает конструкция

- бывает, очень помогает.

Ну а литературы по необычайно красивому и производительному языку Perl вышло уже немало, остаётся лишь пожелать вам успехов в его изучении.

Perl windows:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    DWIM Perl for Windows

    DWIM Perl for Windows

    DWIM Perl for Windows is a Strawberry Perl derivative for Windows. It contains everything you will need for your Perl development.

    It contains:
    • Strawberry Perl 5.14.2.1 RC which itself is a standard Perl with several extensions already installed.
    • A large part of Task::Kensho. a list of recommended packages.
    • Padre, the Perl IDE 0.94 .
    • Module::Version 0.12 so you can use mversion to check which version of each module you have.
    • Moose 2.0402, the post modern Object System.
    • Dancer 1.3092 to build a light-weight web application.
    • Plack and plackup 0.9985 to serve your web pages.
    • Perl::Critic 1.117, to police yourself.
    • Perl::Tidy 20101217, to keep your code nice.
    • DateTime 0.72 to make it easy to deal with dates and time.
    • SQLite 1.35, to hold your data tight.
    • MySQL 4.020, PostgreSQL 2.18.1 and DBD::ODBC 1.31 drivers.
    • Lots of additional modules. (see details in the README file.)

    Установка Perl под Windows

    Установка Perl под Windows Где найти и скачать Perl

    В настоящее время варианты PERL (так называемые "порты" (ports) ) существуют для многих разных машин и операционных систем, в том числе и для Windows 9x, и Windows NT. Искать их надо в первую очередь на сайте CPAN (Comprehensive Perl Archive Network) - www.cpan.org. Там же можно найти многочисленные модули, программы, документацию и другие материалы, отосящиеся к Perl. Порты perl для разных платформ находятся в разделе Browsing -> Perl binary distributions ("ports")

    Для Windows платформ существуют две основных "линии" Perl - так сказать, "классическая" и от фирмы ActiveState (www.activestate.com). Фирма ActiveState выпускает "свои" порты Perl для Win32, средства для запуска Perl как ISAPI extension (ISAPI - это интерфейс серверных расширений веб-серверов Microsoft - PWS и IIS) и различные утилиты разработчика. Последние уже продаются за деньги (на сайте - демо-версии), в то время как PERL можно скачать и использовать бесплатно.

    Существуют и другие, менее известные порты PERL для Win32.

    Для работы нужен perl версии 5 или выше. Лично я уже 2 года пользуюсь Perl 5.003_07 от ActiveState. Узнать версию интерпретатора можно командой perl -v.

    Установка Perl

    Процесс установки Perl из дистрибутива не представляет собой ничего сложного. Программа установки создаст папку для Perl и подпапки в ней, разместит необходимые файлы, а также пропишет путь к файлу perl.exe в autoexec.bat, а также необходимые ключи реестра. Теперь Вы можете запустить Perl-скрипт, просто введя в командной строке:

    perl <путь_к_скрипту>.

    Сразу после установки Perl Вы не сможете запускать CGI-скрипты через Ваш веб-сервер. Для того, чтобы это было возможно, надо "прописать" perl в установках веб-сервера как "script handler" (программа, поддержи- вающая скрипты). Как? Это зависит от веб-сервера.

    Вообще, существует 2 типа CGI-скриптов: "бинарные" (откомпилированные в исполняемый код программы) и "интерпретируемые" - к которым относятся и Perl-скрипты. Важное отличие между ними заключается в том, что вторым нужен так называемый "script handler"-программа-интерпретатор, исполняющая скрипт. Для web-сервера perl.exe и является тем самым "script handler"-ом.

    В большинстве web-серверов для Windows (включая ее "родные" PWS и IIS) "бинарные" CGI-скрипты поддерживаются автоматически. Принадлежность же интерпретируемых скриптов к определенному handler-у определяется расширением файла (исключение - в некоторых "изначально UNIX-овских" web-серверах, например Apache, handler определяется первой строчкой скрипта, начинающейся с "#!").

    Установка поддержки Perl-скриптов в PWS и IIS

    Нижеследующие рекомендации по установке Perl для IIS/PWS были опробованы на PWS в составе Windows95 OSR2.

    В PWS и IIS данные о расширениях скриптов находятся в системном реестре Windows в разделе

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\parameters\Script Map

    В частности, если Вы хотите, чтобы файлы с расширениями cgi и pl запускались как Perl-скрипты, Вам надо прописать следующие параметры в вышеуказанный раздел:

    Если у Вас perl.exe установлен в каталог C:\Perl\bin\, то эти параметры будут иметь вид:

    В тех папках web-сервера, где планируется размещать Perl-скрипты, должно быть разрешение на их исполнение (в PWS это настраивается через веб-интерфейс).

    Запуск Perl-скриптов

    Запуск Perl-скриптов

    ТЕОРИЯ - Как работает Perl-интерпретатор и шлюз CGI

    Для того чтобы понять, как же заставить заработать Perl-скрипт, и разобраться в самых распространенных ошибках при установке, необходимо для начала понимать, каким образом запускает и работает Perl-скрипт

    Perl-скрипты являются в общем случае некомпилируемыми в исполняемый файл, то есть интерпретируемые Perl-интерпретатором каждый раз при запуска Не будем пока касаться устройства механизма компиляции, а также вопроса как оптимизировать запуск Perl-скриптов На данном этапе важно понять как именно они запускаются программистом или пользователем Распространено мнение, что Perl-скрипт должен начинаться с так называемой shebang-конструкции, в которой написано что-то вроде #!/usr/bin/perl для Unix, и даже что-то типа #!Perl для Windows На самом деле данная строчка не является Perl-кодов и что немаловажно, вообще не имеет никакого отношению к языку Perl, а только относится к конкретному файлу Итак мы выяснили, что shebang-строка (Будем далее ее называть также по-умному не имеет прямого отношения в Perl Как же тогда запускать Perl-скрипт? Да очень просто, вызвав команду /usr/bin/perl /path/to/script.pl или просто perl /path/to/script.pl Если вы работаете под Windows, и вас интерпретатор занесен в переменную окружения Path, то вызвать Perl-скрипты можно аналогично, только не забыв подставить букву диска в пути к Perl-скрипту

    Так для чего же нужна тогда shabang-строка, и почему она считает необязательной, если ни один CGI-скрипт, написанный на Perl, без нее не заработает? На самом деле все дело в правах доступа по UNIX Дело в том, что в отличие от Windows, файл имеет разрешение не только на чтение или запись, но и на выполнение его тем или иным пользователем При установке прав пользователя на файл, привилегия выполнения это третье число, то есть к примеру 0755 означает все права для владельца, и чтение и выполнение для группы пользователя и всех остальных пользователей То есть в UNIX имеется возможность попробовать запустить любой файл, если на это имеется соответствующее разрешение, причем расширения файла может и не быть вообще Можно попробовать запустить любой файл командой ./filename из директории с данным файлом Если файл оказывается двоичным исполняемым файлом, то он попросту запускается Но если файл оказывается текстовым, то ничего страшного тоже не происходит, и тогда операционная система начинает искать shebang-конструкцию, и если находит ее то запускает указанный там двоичный файл, и передает ему данный файл в качестве аргумента Таким образом, для Perl строка с shebang-конструкцией является ТОЛЬКО комментарием, а вот для операционной системы дает возможность узнать интерпретатор для данного файла

    Такой подход дает возможность использовать интерпретируемые программы в UNIX наравне с компилируемыми В сервере Apache на самом CGI-скрипты не являются поддерживаемыми сами по себе, для их работы требуется модуль cgi_module, который добавляет тип данных cgi-скрипт И если какой-то файл имеет данный тип, то Apache формирует переменные окружения и просто запускает данный CGI-скрипт в операционную системе

    В Apache для Windows такая система работала бы чуть хуже Как уже было сказано, после того как Apache определяет, что данный файл является CGI-скриптом, он передает его на запуск операционной системе Но Windows умеет исполнять только двоичные исполняемые файлы, и поэтому не знает что делать с shebang-конструкцией По этой причине в Apache под Windows была добавлена возможность распознавания с помощью Apache самой shebang-строки в CGI-скрипте, и уже вызов интерпретатора с данным аргументом в виде данного файла Такой подход дал возможность сделать Apache совместимым в UNIX и Windows Кстати поведение модуля cgi_module в Apache под Windows тоже регулируется Дело в том что Windows в принципе тоже умеет запускать неисполняемые файлы, определяя их интерпретатор по расширению, список которых хранится в реестре Для переключения данной настройки в режим реестра Windows используется опция ScriptInterpreterSource registry, для переключения обратно данная директива удаляется

    Таким образом мы выяснили, как запускаются CGI-скрипты в Apache и для чего нужна shebang-строка Заметим, что права доступа на CGI-скрипт должны быть такими, чтобы пользователь Apache, который обычно называется www-data, мог бы запускать данный CGI-скрипт, при этом установка 777 всегда должна давать такую возможность Однако на некоторых хостингах права 777 выставлять запрещено и при этом возникает ошибка, такое поведения сделано с целью повышения безопасности, но оно никак не противоречит вышеуказанной схеме, просто обычно устанавливается модифицированный модуль cgi_module, который отказывается запускать CGI-скрипты с большими правами Обычно для запуска CGI-скриптов требуется определенное расширение, которые будет связано с ними Поэтому для запуска CGI-скриптов им либо придают определенное расширения, либо устанавливают их обработчиками для заданных файлов, в результате чего CGI-скрипт, выставленный в качестве обработчика запускается автоматически при вызове заданного файла, хотя при прямом вызове он может и не работать Важно не путать между собой директивы AddType cgi-script .ext для установки расширения CGI-скриптов, директиву Options +ExecCGI для разрешение выполнения CGI-скриптов в данной директории, а также директиву Action для установки данного CGI-скрипта в качестве обработчика для определенного типа файлов, установленного с помощью отдельного AddType для этого типа В данной схеме разрешено множественное перенаправление, как по shebang-конструкциям, так и по типам файлов для CGI-скриптов Например если указанный в shebang-конструкции файла также оказывается интерпретируемым файлом со своей shebang-конструкцией, то он будет запущен по цепочке с последовательной передачей файлов как аргументов соответствующим интерпретаторам, но при этом необходимо чтобы все файлы были CGI-скриптами с shebang-конструкциями

    Аналогично можно использовать произвольный CGI-скрипт для обработчика другим файлом, правда необходимо сделать всю цепочку из файлов с расширениями CGI-скрипта, либо использовать AddHandler заместо AddType При этом корневые исполняемые файлы, типа /usr/bin/perl должны быть объявлены в цепочке в основном конфигурационном файле Apache под названием httpd.conf, так как внутри .htaccess файлов нет доступа ко всей файловой системе

    Практика - Установка Perl-скрипта и настройка web-сервера для запуска CGI-скриптов

    Теперь можно применить полученные знания на практике, в частности для конфигурации Apache и запуска своих Perl-скриптов в CGI-режиме Для удобства будем рассматривать Linux-сервер, так как запускать и тестировать свои Perl-скрипты обычно приходится на настоящем хостинге Даже в том случае, если у вас имеется свой сервер или вы настраиваете Apache под Windows, данный материал будет вам полезен, потому что как было указано ранее настройка Apache достаточно схожа Для начала необходимо удостоверится в наличии Perl и соответствующих модулей к нему Частой причиной неработоспособности Perl-скриптов является именно отсутствие нужных модулей Для того, чтобы обобщить настройку Perl под Linux и windows, при установке Perl по Windows воспользуемся следующим правилом - структура каталогов должна быть примерно такая же, как и на системе Linux (Аналогичную структуру предоставляет Denwer), то есть исполняемый файл perl должен быть в папке /usr/local/bin, а модули в /usr/local/lib Также важно добавить путь к исполняемому файлу Perl в переменную окружения Path Для удобства и дополнительной совместимости с linux, также лучше держать всю структуру unix-подобных каталогов в корне диска или на виртуальном диске, чтобы не использовать букву диска в путях Учитывая, что прямой / и обратный \ слеш во многих конфигурационных файлах идентичны, такой подход даст сильную схожеть с linux Чтобы установить Perl под Windows, необходимо скачать ActivePerl с сайта http://www.activestate.com/activeperl/ и установить в заданных корневой каталог, сохраняя структуру дерева папок Также надо помнить, что не во всех операционных системах типа *NIX пути будут в точности такими же, часто встречаются пути и без каталога /local/, то есть просто /usr/bin и /usr/lib, а также /etc для конфигурационных файлов

    Установка модулей под Windows осуществляется с помощью программы PPM, которая имеет графический интерфейс и умеет сама скачивать и компилировать модули, а также устанавливать их в нужную директорию Для увеличения списка возможных модулей, нужно выбрать репозиторий, список которых можно получить в интернете Также при установке важно выбрать правильную папку для хранения модулей Perl, так как будет предложено несколько папок со схожими путями, при этом необходимо выбрать ту, которая не имеет имени диска Если таких папок несколько, то нужно выбрать ту которая имеет путь оканчивающийся на site/lib, а если же во всех папках указан путь диска, это свидетельствует о неправильной настройке Perl Для установки модулей под Linux необходимо компилировать их вручную, при этом обычно используется программа-конфигуратор configure, в которой определяется путь к папке с модулями Perl, и происходит соответствующая настройка Для некоторых дистрибутивов Linux существуют скомпилированные модули, аналогичные модулям Windows, их можно получить и автоматически настроить через установщик apt-get и ему подобные Важно помнить, что часть модулей под Windows имеют характерную особенность, а именно скомпилированные в dll-файл компоненты данного модуля, и загружаемые через bootstrap Именно поэтому достаточно сложные модули нельзя просто копировать не только между разными системами, но и разными папками, так как dll-файлы должны лежать в четко определенном месте Также в Perl имеется возможность для заданного Perl-скрипта указать путь к библиотекам, это можно сделать с помощью прагмы use lib 'path/to/library', указав относительный или абсолютный путь Если таким образом загружается библиотека со скомпилированными компонентами, то dll-файлы можно лежать в папке /auto относительно пути к модулю Надо помнить, что если просто перенести или скопировать модуль с динамическими компонентами в пользовательскую папку, указываемую в прагме lib, то такая библиотека может и не заработать, даже если перенести динамические компоненты в папку /auto - поэтому если очень нужно именно такое использование модуля, то нужно скомпилировать его именно для заданного пути

    Зная вышесказанное, можно запускать Perl-скрипты по windows и под linux В linux благодаря shebang-конструкции с ними можно работать с ними наравне с обычными программами, а в windows можно связать определенное расширение (Например .pl) с интерпретатором Perl и работать с программами также просто Из теоретической справки выше нам известно, что Apache работает с Perl-программами через CGI, причем работает с ними наравне с обычными скомпилированными исполняемыми программами, поэтому дальнейшая работа сводится в настройке Apache для работы с внешними программами через CGI-интерфейс В первую очередь необходимо проверить наличие модуля cgi_module для Apache Он сопоставляет файлам с заданным расширением прямой запуск данных программ, такими расширениями обычно являются .cgi. pl и .exe, при этом данные файлы могут быть как скомпилированными исполняемыми программами, а могут содержать shebang-конструкцию Для совместимости с shebang-конструкциями, в windows необходимо убрать директиву ScriptInterpreterSource registry, чтобы Apache мог работать с данными файлами в точности как в linux Для запуска CGI-скриптов под linux, необходимо указать верные права доступа, необходимые для того чтобы внешний пользователь (Обычно www-data от Apache) мог выполнять данную CGI-программу Главное чтобы права доступа были равны или больше чем необходимые, в таком случае запуск будет проходить без проблем Однако на некоторых хостингах установка высоких прав приводит в ошибке (Что сделано по соображениям безопасности), однако это не является истинным поведением, а происходит за счет специфического (Переделанного) модуля cgi_module, который проверяет нужные права доступа, похожим образом работают модули, которые запускают CGI-скрипты от имени пользователя, которому они принадлежат, однако все эти схемы не являются общеупотребительными Далее при запуске любого CGI-скрипта, Apache формирует переменные окружения и передает POST-данные на STDIN в программу, ожидает ее выполнения, считывает информацию с STDOUT и выводит ее При этом формированием HTTP-заголовков занимается CGI-скрипт, и в случае возникновения какой-то ошибки в Perl-скрипте, Apache просто выдает 500 ошибку - Inertal Server Error, не вдаваясь в причины ее появления В любом случае для Apache, любая CGI-программа является закрытой внешней программой, и Apache не знает о причинах ошибки внутри программы, он лишь проверяет заголовки и выводит информацию пользователю

    Если вы используете Linux\Unix, то скорее всего perl у вас уже установлен. Проверить это проще простого: зайдите в консоль и наберите в ней «perl»(+перевод строки, естественно). Если он уже установлен, то консоль будет ожидать дальнейший ввод — код вашего перл-скрипта. Для выхода из этого режима нажмите Ctrl+C — прерывание, либо нажмите Ctrl+D — указание perlу конца кода, он его выполнит(а чего бы и не выполнить пустой запрос :) ) и вы вернётесь в консоль.

    Кстати, зайдите снова в perl и наберите банальное print «Hello World!» после чего нажмите Ctrl+D. Если вы не опечатались, perl выведет «Hello World!» прямо на STDOUT, а именно в консоль. Это рекомендуют сделать первым практически все учебники по перл.

    Как использовать скрипты Perl?

    Необходимо в качестве первой строки скрипта указать:

    1. !/usr/local/bin/perl

    Файл скрипта должен иметь атрибуты доступа 711. Выставить их можно при помощи FTP-клиента или используя команду chmod 711 script.pl (где script.pl - Ваш скрипт). Внимание: скрипт должен находиться в директории cgi-bin. По умолчанию, вызов скриптов возможен только из этой директории.

    [править ] Запуск

    Нет смысла учить язык, если нету способа по-практиковаться. Мы уже видели один способ запуска perl-скрипта:

    ]# perl print "HW!" HW!root[

    Хороший способ для проверки синтаксиса(взбрела в голову конструкция и интересно поймёт ли perl). Однако, для написания как-либо больших программ или проектов этот способ не годится. Приятно было бы писать в файл и исполнять его. Для этого нужно создать файл с расширением pl (можно и без него, но тогда у Windows возникнут вопросы по поводу идентификации программы-исполнителя этого файла), в него записать свой код. Начать код нужно с #!/usr/bin/perl (опять же можно и без этого, но тогда уже у Unix возникнут проблемы с идентификацией) — этот комментарий указывает операционке через какой файл нужно будет запускать нашу программу.

    Кстати, комментарии в perl пишутся в Unix-style — ставится знак # и до конца строки можно писать всё, что придёт в голову(хоть анекдоты, как это часто делают perl-программисты) — perl это просто отбросит…

    Запускать файл, оформленный подобным образом можно обычным двойным кликом. При таком запуске будет вылазить персональная для нашего скрипта консоль и по окончании работы скрипта закрываться, что вызывает некоторые трудности:

    Итак, не зря я привёл столько доводов против данного способа запуска: данный способ подходит только для запуска конечного продукта. Для отладки лучше всего подходит 3-ий способ:

    ]# perl code.pl

    Кстати, можно и не писать «perl», если вы не забыли написать в начале кода «#!/usr/bin/perl». Правда, при использовании Unix вам потребуется предварить название файла с вашим кодом адресом папки, в которой лежит скрипт. К примеру, «./code.pl».

    [править ] Пару слов о типах.

    Как и в любом языке (кроме, пожалуй, кодов процессора), в перл данные не просто свалены в кучу, а для удобного использования разбиты на типы. Люди, уже программировавшие на языках C\C++ или Pascal\Delphi сразу вспомнят про int(integer), char, string и будут не правы.

    Для всего выше перечисленного в перл есть эквивалент — скаляр, он же — 1ый тип данных. По сути, скаляр — это «элемент», и не важно какого множества: чисел, символов, строк, ссылок… Главное, что он один! Для того, чтобы создать скаляр нам не нужно его как-то особенно объявлять, просто используем: $a=12; Значок $ даёт понять перлу, что это скаляр, а не что либо другое. Для примера, объявим несколько скаляров и проделаем с ними несколько стандартных операций (а ля if, while, for).

    В догонку: комментарии в перл начинаются с символа #.

    1. !/usr/bin/perl

    $a = 12345; $b = 12345.67; $c = .23E-10; $hex = 0xffff; # шестнадцатеричная запись $oct = 0377; # восьмеричная запись $d = 1_234_567_890; # то же самое, что и 1234567890 print $a.$b; # Выведет "1234512345.67" print '=' x 79, "\n"; # Выведет символ "=" 79 раз, после чего символ "\n" - перевод строки $rub = "$a рублей\n"; print $rub; # Выведет "12345 рублей", перевод строки $a -= 12300; # теперь $a равен 45ти if($a)< # $a не 0 и не "0", и не "", и не undef, то есть - истина!

    > while($a)< # пока $a не станет равен 0 (в результате $a--)

    > print "привет из unless'а" unless $a; # unless - это if not.

    1. Сама конструкция может быть записана как unless($a),
    2. но это не красиво :)

    Что нового мы могли увидеть в этом коде? Для тех, кто ещё не знаком с конкатенацией(сложением строк) мог быть непонятен оператор. (точка). Он складывает строки(склеивает), оператор умножение строки на число, думаю, так же мог создать несколько вопросов. Оператор «x» берёт слева строку и повторяет её указанное справа число раз. Как можно уже было заметить, все операции в перл заканчиваются точкой с запятой. Однако, точка с запятой необязательна в некоторых случаях:

    Так же можно было заметить, что 1-ый комментарий нам ничего не объяснял… Задачей его было объяснить операционной системе через что запускать данный файл. В данном случае мы запускаем через исполняемый файл, находящийся по адресу /usr/bin/perl. Эту строчку можно и не писать, но тогда запускать файл придётся из консоли с прямым указанием на программу, которая будет интерпретировать наш код, то есть так:

    $ perl example1.pl

    в случае, если наш код сохранён в файл

    /example1.pl или же, при наличии первого комментария можно запускать так:

    $ ./example1.pl

    или даже 2мя кликами по файлу(в графической оболочке), но для данного кода смысла в этом мало — всё выполнится и сразу исчезнет.

    В Windows всё сделано иначе, а именно через расширение файла (.pl), поэтому можно опять же дважды кликнуть или же пойти в консоль и набрать там

    > perl example1.pl

    > example1.pl

    и увидеть работу нашего первого скрипта.

    Кстати, если вы ещё не заметили, в переменную $a мы клали число, а пользовались при конкатенации уже строкой. Во время if’a $a вообще становилась логическим значением… И это всё «бесплатно» — без всяческих конвертов и явных преобразований типов. Перл сам знал что нам надо и конвертировал переменную в тот тип, который нам нужен в данный момент. Вот такой вот умный зверь! :)

    Но для того, чтобы он нас понимал, мы должны так же понимать и его: к примеру, когда мы преобразовываем скаляр в логическое выражение, мы должны понимать, что всё правда(истина), кроме пустой строки, нуля, строки «0? и специального значения undef — не определён. Создать скаляр, значения undef проще простого: undef $a или $a = undef.

    Ok. Теперь у нас есть возможность пользоваться переменными — элементами, но если нам надо использовать множество таких… Иначе говоря массив элементов. Для этих целей в перл есть тип данных «массив». Его опять же никак не надо описывать… просто используй! @a = (0,1,2,3,4); опять же символ @ здесь непросто для красоты, а указывает на то, что это массив! В данном примере мы присвоили первым 5ти элементам массива цифры от 0 до 4. И опять несколько примеров:

    1. !/usr/bin/perl

    @a = 0..9; # забили первые 10 элементов массива цифрами от 0 до 9 print $a[2]; # напечатали 2ой элемент массива. Почему здесь $ а не @?

    1. всё логично: используем мы не массив, а элемент, пусть даже массива.

    print @a[2..6]; # а вот здесь как раз @, потому как и печатаем мы не элемент,

    1. а подмассив (кусок массива, слайс) со 2ого по 6ой элемент

    print for @a; # Ещё один классный пример того, как перл понимает на с полу слова :)

    1. если для кого не очевидно, что здесь происходит - объясняю:
    2. для каждого элемента массива @a напечатать его.

    > # так как pop уменьшает массив, то и из цикла мы выйдем

    3-ий и последний тип данных — хеш(hash), произносится как «хэш». Так же его можно назвать ассоциативным массивом. Мы его пока можем представлять, как некий массив, где элемент мы получаем не по числу — номеру элемента, а по строке — ключу хеша.

    Объявляется хеш так: %h = (color => ‘red’, width => ’10px’, height => ’100px’); процент указывает на то, что это хеш. В него мы передаём массив из 6ти элементов, каждый чётный воспринимается как значение, а нечётный — как ключ. То есть по ключу color мы получим значение red. Может показаться странной конструкция color => ‘red’. Мы могли это так же записать как «color»,’red’. Правда у => есть ещё пара козырей: он сначала выполнит то, что слева(если это команда), после этого заменит все переменные их значениями, как это делают двойные кавычки. К слову: print '@a'; # выведет "@a" print "@a"; # выведет содержимое массива @a

    Пара примеров с хешами:

    1. !/usr/bin/perl

    ); print $h<'color'>; # и опять скаляр, только скобочки уже

    1. не квадратные(как у обычного массива), а фигурные

    print "\n$_ => ",$h<$_> for keys %h;

    1. Для неподготовленного человека это может показаться просто кракозяброй,
    2. Но мы уже кое-что знаем и можем понять смысл этой команды за исключением 2х моментов.
    3. 1. keys - функция, возвращающая массив ключей поданного на вход хеша
    4. 2. скаляр $_ - это переменная "по умолчанию". Проще говоря, это то, о чём сейчас речь,
    5. в данном случае речь идёт об элементе массива ключей(на каждом шаге цикла о разном).
    6. $_ - первая специальная переменная из множества, заложенных в перл.
    [править ] Вызов сgi-скрипта в системе unix

    Если вы поместили ваш скрипт в каталог cgi-bin и сделали его выполнимым, то поль­зователь может вызвать скрипт, непосредственно используя URL. Однако необходи­мо выполнить несколько шагов. В первую очередь, в начало скрипта необходимо по­местить строку, которая идентифицирует файл как программу на языке Perl :

    Примечание: Вы должны будете указать в этой строке путь, зависящий

    от того, где установлен Perl на вашей системе.

    Далее необходимо сделать скрипт выполнимым, используя команду chmod :

    Если директория отлична от установленной по умолчанию, то в этой директории необходимо создать файл .htaccess со следующим содержанием: Options ExecCGI.

    Установка и начало работы с Perl

    Установка и начало работы с Perl

    В ней вы узнаете, как установить Perl на Microsoft Windows и как начать использовать его на Windows, Linux или Mac.

    Вы узнаете, как установить и настроить среду разработки, или, говоря простым языком: какой редактор или IDE использовать для Perl-программирования?

    Также мы увидим стандартный пример "Hello World".

    В Windows мы будем использовать DWIM Perl. Это пакет программ, содержащий компилятор/интерпретатор Padre, Perl IDE. и ряд модулей из CPAN.

    Для начала зайдите на сайт DWIM Perl и откройте страницу загрузки DWIM Perl для Windows.

    Скачайте исполняемый файл и установите его в вашу систему. Предварительно пожалуйста убедитесь, что у вас не установлена любая другая версия Perl.

    Конечно, разные версии Perl можно заставить работать вместе, но как это сделать потребует дополнительных разъяснений. Поэтому пусть пока у вас в системе будет установлена одна единственная версия Perl.

    Большинство современных Linux-дистрибутивов поставляются со свежей версией Perl. Её мы и будем использовать. В качестве редактора вы можете установить Padre - большинство дистрибутивов дают возможность сделать это с помощью стандартного менеджера пакетов. Или вы можете выбрать любой другой текстовый редактор. Если вы дружите с Vim или Emacs, используйте его. Если нет, попробуйте Gedit - простой и удобный.

    Уверен, Маки также поставляются с предустановленным Perl, ну или вы можете легко установить его с помощью стандартных средств установки.

    Редактор и IDE

    Хотя я это и советую, вовсе не обязательно использовать Padre IDE, чтобы писать код на Perl. В следующей части учебника я перечислю пару редакторов и IDE. которые вы можете использовать для программирования на Perl. Но даже если вы выберете другой редактор, я бы рекомендовал - для пользователей Windows - установить упомянутый выше пакет DWIM Perl.

    Он идет с большим количеством готовых Perl-модулей, это сэкономит вам массу времени и сил.

    Вы можете посмотреть видео Hello world with Perl (англ.), которое я загрузил на YouTube. Также обратите внимание на Beginner Perl Maven video course (англ.).

    Первая программа

    Ваша первая программа будет выглядеть, например, так:

    Рассмотрим её шаг за шагом.

    Hello world

    Как только вы установили DWIM Perl, вы можете нажать на "Пуск -> Все программы -> DWIM Perl -> Padre", откроется редактор с пустым новым файлом.

    Как вы, наверное, заметили, команды в Perl заканчиваются точкой с запятой ;. Знак \n используется для обозначения перевода строки. Строки заключены в двойные кавычки ". Функция print печатает текст на экран. В результате выполнения этого кода Perl выведет на экран текст, заканчивающийся переводом строки.

    Сохраните файл как hello.pl, чтобы затем вы запустить его командой "Run -> Run Script". Появится новое окно с результатами работы программы.

    Готово, вы писали ваш первый Perl-скрипт.

    Теперь давайте его немного усовершенствуем.

    Perl в командной строке для тех, кто не пользуется Padre

    Если вы не используете Padre или другую IDE. вы не сможете запустить скрипт прямо из редактора. По крайней мере, по умолчанию. Нужно будет открыть shell (или cmd в Windows), перейти в каталог, где вы сохранили hello.pl и набрать команду:

    perl hello.pl

    Так Perl-скрипты запускаются из командной строки.

    say() вместо print()

    Давайте немного улучшим наш однострочный Perl-скрипт:

    Для начала нужно указать минимальную версию Perl, которую мы хотели бы использовать:

    Теперь можете запустить скрипт еще раз, выбрав в меню "Run -> Run Script", или нажав клавишу F5. Перед запуском файл будет автоматически сохранен.

    В целом, указание минимальной требуемой версии Perl является хорошей практикой.

    В нашем случае это добавляет в Perl также несколько новых функций, в том числе оператор say(). say похож на print. но короче, и автоматически добавляет в конце символ перевода строки.

    Вы можете переписать ваш код так:

    Мы заменили print на say и убрали \n с конца строки.

    Сейчас вы скорее всего используете Perl версии 5.12.3 или 5.14. Большинство современных Linux-дистрибутивов версии поставляются с Perl 5.10 или более поздней версии.

    К сожалению, кое-где ещё работают старые версии Perl. В них нет оператора say(). и, кроме того, могут потребоваться некоторые другие изменения в примерах, которые мы рассмотрим позднее. В дальнейшем я буду отмечать, если используются возможности версии 5.10.

    "Ремни безопасности"

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

    Команда use говорит Perl, что нужно загрузить и использовать каждую прагму.

    strict и warnings помогут вам отловить некоторые общие ошибки в коде, а иногда даже просто не дадут вам их сделать. Это очень удобно.

    Чтение ввода

    Теперь давайте ещё улучшим нашу программу: будем спрашивать у пользовательницы её имя, а затем выводить его на экран.

    $name называется скалярной переменной, или просто: скаляр.

    Переменные объявляются при помощи ключевого слова my. (По секрету заметим, что на самом деле это одно из требований, добавленных прагмой strict ).

    Скалярные переменные всегда начинаются со знака доллара: $. <STDIN> это инструмент для чтения строки с клавиатуры.

    Введите наш новый код и запустите его, нажав клавишу F5.

    Он спросит имя. Введите его и нажмите ENTER, чтобы сообщить Perl об окончании ввода.

    Обратите внимание, что вывод нашей программы слегка кривой: запятая после имени появляется на новой строке. Это произошло потому, что ENTER, который вы нажали после ввода имени, попал в переменную $name.

    Избавляемся от переводов строк

    Это настолько распространенная в Perl задача, что есть специальная функция chomp. которая удаляет концевой перенос строки.

    Заключение

    В начало каждого скрипта, который вы пишете, всегда добавляйте use strict; и use warnings;. Также крайне рекомендуется добавлять use 5.010;.