Nasıl PHP'nin (dağıtım) sadelik ama Perl gücünü alabilirim?

12 Cevap php

Ben PHP dili hor ve ben yalnız değilim oldukça eminim. Ama PHP hakkında çok şey mod_php alır ve apache çalışma ile entegre kanlı ayrıntılarını gizler, ve CGI gibi istek izolasyon ve iyi performansta yoludur.

Perl semantik ile, PHP'nin çalışma zamanı ortamı olarak aynı basitlik, hız ve izolasyon almak için kısa mesafeli yaklaşım nedir? Seçim için çapraz istek globalleri, dağınık geneli, çok şablon motorları: çiğ mod_perl ile kendimi asmak bana çok ip verir gibi hissediyorum.

FastCGI? HTML :: Mason? Ben sadece bana izin bir çerçeve olsaydı, büyük ölçüde Perl geliştirme yapmak istiyorum.

12 Cevap

Bak Catalyst bu MVC (model, görünümü, kontrolör) çerçeve işleri veya apache_perl ile bir-yalnız-standı ve dağınık bit bir sürü gizler. Biraz garip bir öğrenme eğrisi (hızlı başlangıç, yavaş, orta, o zaman gerçekten gelişmiş şeyler için tıklar) vardır.

Eğer o zaman bu kullanarak olmalıdır Catalyst kullanmamaya karar bile Catalyst Template Toolkit iş mantığı tasarım mantığı ayırmak için kullanmanıza olanak sağlar, Şablon araç gerçekten harika. Tüm HTML yaparsanız kendinizi o zaman da Catalyst ile kullanabileceğiniz başka bir alternatif olduğu için Template::Declare yorumlayan isteyebilirsiniz, ancak HTML :: Mason, ben şahsen gibi bir şey değildir.

Veritabanı şeyler için yine Catalyst ile ya da kendi üzerinde çalıştığı, DBIx::Class bakmak.

I Catalyst with FastCGI. Also, for templating, Template::Toolkit benim kişisel favorim tavsiye ederim, ama HTML::Mason de son derece toplumda kabul edilir.

Perl PHP yakın, iyi kabul eşdeğer muhtemelen HTML::Mason.

PHP gibi, bu belgeye Perl gömer ve bu işler:

% my $noun = 'World';
Hello <% $noun %>!
How are ya?

O'Reilly kitabı Embedding Perl in HTML with Mason ücretsiz çevrimiçi kullanılabilir.

Ben sadece gördüm Dancer. Bu iyi bir seçenek olabilir gibi görünüyor.

Bir çok olasılık size ne yapmak istediğinize bağlı olarak, vardır.

Eğer Mod_perl hızının avantajını, ama vanilya CGI sadeliği almak istiyorsanız, CPAN Modperl::Registry dağılımını kontrol. Bu büyük ölçüde değişmeden sizin düz CGI komut dosyalarını çalıştırmak için izin verecektir.

Çerçeveler açısından, CGI::Application büyük bir hayranı değilim. Bu bir web uygulaması size uygulama istediğiniz şekilde tasarlamak için özgürlük vererek, yapmanız gereken en her şeyi yönetir çok basit bir miras tabanlı bir çerçeve sağlar. Basit bir uygulama monolitik bir şekilde yapılabilir; Bir daha karmaşık bir tam-teşekküllü MVC tasarımı kullanabilirsiniz. Genel olarak Perl gibi, CGI-App seçenekleri bir sürü verir ve genellikle yolumdan kalır.

CGI-App varsayılan mükemmel HTML::Template modülünü destekler ve bu muhteşem Template Toolkit gibi diğer çiftleşmiş sistemleri için eklentileri vardır. Diğer amaçlar için plugins bir bolluk vardır.

Eğer daha fazla iş sizin için yapılır istiyorsanız, check out Catalyst. Şeyler yapmanın bu şekilde Ruby on Rails kullandım daha tanıdık olabilir.

Diğer popüler web-app çerçeveleri Class::Prototyped nesne çerçeve dayanmaktadır Randal Schwartz tarafından yazılmış, Jifty ve CGI::Prototype bulunmaktadır.

Yukarıda belirtilen Catalyst tüm web uygulamaları oluşturmak için güzel bir araçtır, ama her yerde basit yakın hiçbir şekilde olduğunu. PHP temel gücü aksi statik sayfalarda gerektiği gibi yapabileceğiniz yani, bunun küçük parçalar gömebilirsiniz olduğunu:

<html> <body> <p>The value of 2+2 is: <?php echo 2+2; ?></p> </body></html>

ve web tarayıcınızda görmek:

The value of 2+2 is: 4

Eğer Catalyst (bildiğim kadarıyla) ile böyle bir şey yapmak için çalışırsanız, basit bir değer yazdırmak için birden fazla dosya ile bütün bir uygulama geliştiriyoruz. En azından, ben gördüm öğreticiler basit gömme nasıl hiçbir açıklama yok.

Neyse ki, sadeliğin bu düzeyde can bazı yollar (Perl gücü sayesinde) hatta basit olabilir Mason ile ulaşılabilir. Yukarıdaki örnek okur:

<html><body><p>The value of 2+2 is: <% 2+2 %></p></body></html>

ve aynı sonucu alırsınız.

Yüklediğiniz ve Mason ile çalışmaya başlamak ve size rağmen daha sonra çok karmaşık, tamamen Perl odaklı projelere geçmek için planlıyorsanız sonra, ancak, onunla yan Catalyst yan kuramazsınız hiçbir neden yok.

I exactly sonra ne sağlamak için gidiyordu ki, mod_perlite ne hale geldi merak ediyorum.

Catalyst gibi şeyler ve CGI :: Application yerine PHP kendisinden daha Zend Framework daha eşdeğerleri vardır. PHP "kutunun dışında" sunan web sayfaları oluşturmak için temel işlevselliği çoğaltmak için o zaman her baz Perl kurulumda mevcut olmalıdır iki CPAN modülleri gerekir:

use CGI;
use DBI;

Eğer gerçekten ihtiyacınız var. Şimdi yerine:

$_POST['param']
$_GET['param']

var:

my $q = new CGI;
$q->param('param'); # same for post or get

Ve yerine:

$dbh = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$sth = mysql_query("SELECT 1 FROM table", $dbh);
while($row = mysql_fetch_assoc($sth))
{
    // do something with $row
}

Sen var:

my $dbh = DBI->connect('DBI:mysql:host=localhost;', 'mysql_user', 'mysql_password');
my $sth = $dbh->prepare("SELECT 1 FROM table");
$sth->execute();
while(my $row = $sth->fetchrow_hashref)
{
    # do stuff with row
}

SQL enjeksiyon hakkında endişelenmenize gerek yoktur böylece hazırlanan statments ve sınır değişkenleri sunar çünkü DBI kod biraz daha karmaşıktır. PHP yüzden PDO gibi bir şey kullanabilirsiniz veya kendi veritabanı sınıf yazmak gerek bu sunmuyor.

Eğer bir komut dosyası HTML çıktı isteseydi sol tek şey. Ama sen yapmak istemiyorsun? Bunun için HTML :: Şablon veya Template :: Toolkit kullanmak, size PHP Smarty veya yerli şablonları kullanarak olmalıdır aynı şekilde.

Ben bu soruyu sordu Mojolicious var olsaydı, ben bunu sordum olurdu şüphesiz.

Özel olarak Mojolicious::Lite

Aristo katılıyorum. mod_perlite bitmiş, yalnızca eğer, aradığınız sadece ne gibi geliyor.

Basitlik açısından PHP yakın HTML :: Mason.

Catalyst düşündüren sadelik arayan birisi için kötü bir şaka ... Ve ben şimdi mutlu her gün Catalyst ile çalışıyorum.

HTML ile çalıştım :: Mason, ilk RT hack ve daha sonra onunla iki siteleri oluşturmak. Orada bir öğrenme eğrisi var, ama çok kötü değil. Daha da kötüsü, ben düşünüyorum, bir şey yüklüyor, ancak Mason daha Apache ile yapmak için daha fazla ve mod_perl vardır. Parçaları yerine sonra, bunu (Perl kendisi gibi) yapmak gibi karmaşık yalnızca bulunuyor.