我是Perl編程新手。我怎樣才能使用它而不是PHP?在Xampp或PHP中,我們有「htdocs」來存儲我們的.php文件,但我怎樣才能保存我的.pl文件?如何在Perl中爲WWW編寫服務器端代碼?
當我嘗試通過本地主機打開一個.pl時,整個文件都是可下載的,不像在php中打開.php時,執行php代碼。
我是Perl編程新手。我怎樣才能使用它而不是PHP?在Xampp或PHP中,我們有「htdocs」來存儲我們的.php文件,但我怎樣才能保存我的.pl文件?如何在Perl中爲WWW編寫服務器端代碼?
當我嘗試通過本地主機打開一個.pl時,整個文件都是可下載的,不像在php中打開.php時,執行php代碼。
最簡單的選擇是將您的Web服務器配置爲支持CGI,然後編寫您的Perl以遵循CGI協議(CGI module對此有幫助)。如果您願意,您可以配置服務器執行任何擴展名爲.pl的文件。
稍微複雜但更靈活的是PSGI/Plack。這是一組中間件,您可以通過多種方式連接到Web服務器(例如FastCGI或mod_perl)以獲得更好的性能。這也提供了一些很好的調試選項。有一個advent calendar style guide,你可能會覺得有用。
從一個天真的方法,這聽起來像你的網絡服務器配置不正確;它應該解釋文件,而不是傳遞出來。
出於好奇,如果您知道PHP,爲什麼要使用Perl作爲網絡資料?我以爲我讀了一篇文章,說PHP在用於顯示網頁時比Perl快。
我在Google上發現的第一個基準測試表明,Perl比PHP快得多。 (不知道如何代表現實世界的東西)。你可能已經找到了比較CGI和mod_php的東西; CGI與每個請求相關的啓動成本很高。 – Quentin
即使在CGI模式下並且使用DBIx :: Class ORM,Perl也可以很快。 –
對於超過90%的網頁,速度幾乎無關緊要。你的早期實驗是每分鐘處理1000次命中嗎?不見得。在Web服務的基礎上,天真地將「Perl」與「PHP」進行比較的任何基準測試都不值得它的組成部分。關於每個環境的web服務器選擇和配置都有很多問題,因此任何聲明通常都是愚蠢的。 – daotoad
如果你想從Perl5 web開發開始,它是有用的開始CGI,但 不是必要的。
有CGI模塊。你可以看看HTTP如何工作 以及Apache或任何你使用的服務器如何調用你的CGI程序。良好的開端是使用這個腳本 :
#!/usr/bin/env perl
use strict;
use warnings;
print "Content-type: text/html\n\n";
print "<html>";
print "<body>";
print "<table>";
for my $var_name (keys %ENV) {
print "<tr>";
print "<td>$var_name</td>";
print "<td>$ENV{$var_name}</td>", "\n";
print "</tr>"
}
print "</table>";
print "</body>";
print "</html>";
然後看着像「REQUEST_URI」變量「REQUEST_METHOD」和「QUERY_STRING」,你可以得到 知道什麼CGI模塊在後臺做。
要知道,你的腳本必須被設置爲運行CGI 腳本,如目錄是很重要的:
ScriptAlias /cgi_bin/ /var/cgi_bin/
<Directory /var/cgi_bin/>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
和文件必須由運行服務器的任何用戶(例如爲可執行。 Apache2),並且可讀。
此後,您可以看看現代工具包,如Catalyst & Mojolicious。我建議你mojolicious 。還有一個名爲Dancer的網絡框架。
關於框架,催化劑在這裏很長時間,它的工作原理,但它帶來了一些牛皮紙。這試圖通過像mojolicious這樣的新框架來解決。 Mojolicious不要 幾乎沒有外部CPAN依賴關係。
XoR已經提到過它,但我想重申:Mojolicious!它有一個模板引擎,可以讓你在HTML中混合使用Perl代碼,但是你可以在應用程序本身中完成大部分繁重的工作。 Mojolicious還包括(幾個)內置的Web服務器(一個用於測試,一個用於生產),比Apache更易於使用。
易於安裝:只需使用cpan
(或其他)安裝Mojolicious
。
寫一個基本的腳本:(簡單的Hello World):
#!/usr/bin/env perl
use strict;
use warnings;
use Mojolicious::Lite;
get '/(:name)' => {name => 'World'} => sub {
my $self = shift;
$self->render('index');
};
app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html><html>
<head>
<title> Hello <%= $name %> </title>
</head>
<body>
Hello <%= $name %>
</body>
</html>
並運行:morbo myapp.pl
請注意,__DATA__似乎無法在我的perl XAMPP安裝在Windows上工作,並且您必須將index.html.ep放入它自己的模板目錄中的文件中http://mojolicio.us/perldoc/Mojolicious/Lite# External_templates –
如果通過Strawberry Perl或activestate而不是XAMPP運行,會發生什麼?有沒有關於XAMPP包含哪些Perl的信息? –
似乎很難找出哪種類型的perl XAMPP附帶。 XAMPP網站上沒有提到什麼類型。 perl -v只是說5.10 http://win32.perl.org/wiki/index.php?title=Win32_Distributions#XAMPP_.2B_Perl-Extension –
至少給你的問題相關的標題。現在它讓別人不知道這個問題。 – Bart