Советы по кодированию Perl для работы как PHP


Я в первую очередь программист на perl, но, как и многие, также пишу на PHP для работы с клиентами, особенно веб-приложениями.

Я обнаружил, что дублирую многие свои проекты на двух языках, но использую разные парадигмы (например, для обработки входных данных cgi и данных сеанса) или функций.

Что я хотел бы сделать, так это начать кодировать свой Perl способом, который больше похож на PHP, чтобы я а) держал в голове одну парадигму б) может быстрее переносить сценарии из один к другому

В частности, я спрашиваю, могут ли люди посоветовать, как вы могли бы сделать следующее в perl?

1) Воспроизвести функциональность $_SESSION, $_GET и т.д. Например, путем упаковки метода param() CGI.pm, библиотеки сеансов?

2) Библиотека шаблонов, похожая на PHP Я привык смешивать свой код и HTML в соглашении PHP. например

<h1>HTML Code here</h1>
<?
 print "Hello World\b";
?>

Может ли кто-нибудь посоветовать, какой движок шаблонов perl (и, возможно, конфигурация) позволит мне кодировать аналогично?

3) Библиотека функций PHP Кто-нибудь знает библиотеку для perl, которая воспроизводит множество встроенных функций php?

Author: citelao, 2010-06-07

4 answers

Взгляните на Embperl.

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

Чтобы осветить ваши конкретные моменты:

  • $_GET : EmbPerl обеспечивает %fdat хэш, который содержит полный набор данных формы, переданных через POST или GET

    %fdat не делает различий в том, возникло ли значение в строке запроса GET или в поле формы с помощью СООБЩЕНИЕ).

    Если вам абсолютно НЕОБХОДИМО иметь только значения из строки запроса GET, вот простой пример функции для ее получения: http://urlgreyhot.com/personal/resources/embperl_getting_values_query_string - хотя почему вы хотите отделить данные GET от POST, в данный момент от меня ускользает.

  • $_SESSION : Я не на 100% понимаю, что это делает в PHP, но если я прав, есть %udat для данных каждого пользователя и %mdat для данных каждого модуля/страницы для обработки сеанса всякое такое.

    Использование обоих более подробно описано в разделе " Обработка сеансов" области документов EmbPerl, наряду со всем остальным множеством поддержки сеансов в EmbPerl

    Вот краткое описание %udat:

    ...как только вы что-либо пишете в %udat, Embperl создает идентификатор сеанса и отправляет его через файл cookie в браузер. Данные, которые вы записали в %udat, хранятся в Apache::Session. В следующий раз, когда тот же пользователь запросит страницу Embperl, браузер отправит файл cookie с возвращением идентификатора сеанса и Embperl заполняет хэш %udat из Apache::Session теми же значениями, которые вы сохранили для этого пользователя.

  • Код шаблона, который вы включили, будет выглядеть так в EmbPerl:

       <h1>HTML Code here</h1>
       [-
        print OUT "Hello World!";
       -]
    

    Или для более идиоматичного/правильного решения,

       <h1>HTML Code here</h1>
       [+ "Hello World!" +]
    

    P.S. Я понятия не имею, что "\b" делает в PHP, поэтому я не клонировал это.

    Embperl поддерживает все стандартные шаблоны ([- -] для выполнения, [+ +] для включения результатов произвольного кода Perl, команды управления потоком шаблонов ([$ if $]/'[$ за $]` и т. Д.) и многое другое. Он также полностью совместим с mod_perl.

 6
Author: DVK, 2010-06-07 15:45:24

2) Если вы буквально хотите, чтобы ваш скрипт был шаблоном, как в PHP, есть Markup::Perl модуль (который вырос из другого проекта, который на самом деле назывался PerlHP). Существуют и другие модули, такие как HTML::Mason, для того, что программисты Perl считают механизмами создания шаблонов.

3) В CPAN я нашел PHP::Strings и PHP::DateTime, но я ими не пользовался и в остальном не могу за них поручиться.

 5
Author: mob, 2010-06-07 05:27:05

Вы также должны проверить mod_perlite, это модуль Apache, пытающийся эмулировать поведение mod_php для Perl, хотя разработка на нем, похоже, застопорилась. Дополнительная информация из README.

 2
Author: kixx, 2010-06-07 06:04:48

Я собирался сказать вам, чтобы вы любили Perl и PHP за их уникальность, но № 1 кажется мне немного праздным развлечением. Мой совет - закодировать его самостоятельно и отправить в CPAN. Я прочитал ваш вопрос и подумал:

use CGI::PHPLike qw(:superglobals); # Pull in everything from CGI::PHPLike::Vars

CGI::PHPLike::Config->variables_order 'EGPCS';

...

%_ENV вероятно, это просто псевдоним для %ENV perl. %_REQUEST и %_SESSION, вероятно, являются связанными объектами и т.д. Черт возьми, %_SESSION может даже быть подкреплено PHP::Session::Serializer::PHP.

Прочитайте спецификацию CGI и проверьте источник CGI.pm , из конечно, но также и более простые модули, такие как CGI::Lite.

 1
Author: pilcrow, 2010-06-07 06:42:10