Советы по кодированию Perl для работы как PHP - PullRequest
2 голосов
/ 07 июня 2010

Я в первую очередь 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?

Ответы [ 4 ]

6 голосов
/ 07 июня 2010

Посмотрите на EmbPerl .

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

Чтобы покрыть ваши конкретные пункты:

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

    % fdat не делает различий относительно того, произошло ли значение в строке запроса GET или в поле формы через POST).

    Если вы абсолютно ДОЛЖНЫ иметь только значения из GET в QUERY_STRING, вот простой пример функции для ее получения: 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 $] / '[$ for $] `и т. Д.) и многое другое. Он также полностью совместим с mod_perl.

5 голосов
/ 07 июня 2010

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

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

2 голосов
/ 07 июня 2010

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

1 голос
/ 07 июня 2010

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

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

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

...

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

Читать CGI spec и, конечно, источник CGI.pm , но также и более простые модули, такие как CGI :: Lite .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...