什么时候应该使用Perl CGI而不是PHP(反之亦然)?

什么时候应该使用Perl CGI而不是PHP(反之亦然)?,php,perl,cgi,cpan,Php,Perl,Cgi,Cpan,出于爱好,我在一个托管服务器上有一个共享空间,它提供了PHP和Perl CGI,就像许多托管服务器一样。我在几个地方读到过CGI脚本现在已经过时了,我认为主要是为了性能问题(比如) 但由于我刚刚开始学习Perl,我不想浪费时间在PHP中实现在Perl中更容易(或只可能)的解决方案上 还有样板文件问题,我知道CPAN(这是存在的,还没有内容),但不熟悉PHP库(尽管我毫不怀疑它们的存在)。我不准备10^10次从头开始编写登录过程或基本用户管理 我现在也不想浪费大量时间在研究爱好项目上,所以我想,让

出于爱好,我在一个托管服务器上有一个共享空间,它提供了PHP和Perl CGI,就像许多托管服务器一样。我在几个地方读到过CGI脚本现在已经过时了,我认为主要是为了性能问题(比如)

但由于我刚刚开始学习Perl,我不想浪费时间在PHP中实现在Perl中更容易(或只可能)的解决方案上

还有样板文件问题,我知道CPAN(这是存在的,还没有内容),但不熟悉PHP库(尽管我毫不怀疑它们的存在)。我不准备10^10次从头开始编写登录过程或基本用户管理


我现在也不想浪费大量时间在研究爱好项目上,所以我想,让我们向专家请教一个起点。

我在网站上同时使用Perl和PHP——出于历史原因,主要是在工作中使用Perl,在家中使用PHP;我认为他们之间没有太多选择

如果您的页面大多是固定的HTML,只需少量计算,那么PHP就更容易了,因为它是嵌入在HTML中的

我发现PHP是一种比Perl更严格的语言,因此有时限制更大。梨和CPAN非常相似——我想没有那么大,但CPAN太大了,里面有很多渣滓


科林

这是一个相当主观的问题,决定用什么作为业余爱好。在研究了PHP之后,我决定把学习Perl作为一种爱好,我不喜欢这样一个事实,即我无法阅读大部分PHP,并且被内置函数的列表吓倒了

我做的最初几件事是用于联系人表单的CGI脚本和一个相册生成器。我在一个cheapo共享托管计划中,我没有遇到任何性能问题,因此性能问题从未发挥作用

相反,comp.lang.perl.misc和CPAN的存在确保了我从未重新考虑过不深入研究PHP的决定

同时,我意识到我网站上的大部分内容在生成后都是静态的,所以现在我编写Perl脚本来离线生成内容


因此,我的答案是,选择一个小项目,任何事情都可以,并使用Perl和适当的CPAN模块实现它,看看您是否喜欢它。

PHP和Perl都有自己的优点,但这确实是主观的。Perl在CPAN上有大量可用的框架,即使在纯CGI环境中,也可以使其工作得和PHP一样好,甚至更好。同时,PHP拥有大量的追随者和大量的现成功能,使网站编程变得简单。 对我来说,选择归根结底是个人偏好。我个人更喜欢使用Perl,而不是尝试在PHP中找到所有功能性方法。 祝你好运

CGI的“过时性”实际上只是一个因素,如果你正在做一个大的、复杂的、有很多页面浏览量的网站

许多人认为CGI已经过时,但他们并不真正理解CGI是什么。人们普遍错误地认为CGI本质上是一种基于Perl的技术。许多人攻击CGI是为了抵御对Perl的邪教攻击,以支持他们支持的任何语言。如果你想成为一名真正的技术专家,你需要了解基本问题,并根据实际情况做出选择

CGI是一个与Web服务器的接口,允许您用任何语言编写交互式页面--。当服务器收到由CGI脚本控制的页面请求时,服务器运行脚本并将结果返回给请求者

如果编程语言每次执行时都需要加载VM、解释器或编译器,那么每次访问页面时都需要此启动时间

CGI加速器,如FastCGI、mod_php、mod_perl等,始终在内存中保留解释器/VM,可以保持库的加载,甚至可以缓存脚本中的字节码以减少脚本启动开销

如果你正在制作一个简单的、个人的或业余爱好的网站,CGI就可以了。PHP也将如此

如果您的站点需要更快的技术,您可以使用mod_perl、FastCGI或其他CGI加速技术

您使用的语言应该由它提供的工具以及它们如何满足您的需要来决定

  • 列出您需要的功能
  • 列一张交易破坏者的名单
  • 现在对照这两个列表检查每个可能的工具集
  • 哪一个最好?测试一下
  • 它很烂吗?将其从列表中划掉,然后返回到步骤4
  • 另外,我建议不要使用。仅仅因为它是可能的,并不意味着你应该使用它


    更新:正如mpeters指出的那样,mod_perl、mod_php、mod_ruby等不仅仅是CGI加速器;它们提供对apacheapi的访问。它们起着CGI加速器的作用,但可以做很多、很多、更多的事情

    FastCGI是一款纯CGI加速器

    更新2:PHP和CGI不是相互排斥的。PHP通常与FastCGI一起使用。

    尝试使用

    [%title%] [%title%] [%content%] &抄袭;[%版权所有%]
    如果您使用托管,在许多情况下PHP也将作为CGI运行。如果不想运行FastCGI或mod_perl,可以使用。应用程序也将使用FastCGI或mod_perl运行,但与Catalyst不同的是,Catalyst也将作为CGI运行。Catalyst和CGI::Application也可以使用它们自己的web服务器运行。

    从可伸缩性的角度来看,使用PHP还是Perl都是没有意义的,就像用PHP和C编写的web应用程序之间的差异是没有意义的一样。如果差异真的很重要,我们都会编写C或汇编

    PHP速度很慢,但这并不能阻止维基百科、Facebook和雅虎广泛使用它

    那里
    sub hello :Path('/hello') :Args(0) {
        my ( $self, $c ) = @_;
    
        # Hello World
        $c->response->body( $c->welcome_message );
    }
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> <html> <head> <title>[% title %]</title> </head> <body> <div id="header"> <a href="/index.html" class="logo" alt="Home Page"></a> <h1 class="headline">[% title %]</h1> </div> [% content %] <div id="footer"> <div id="copyright"> &copy; [% copyright %] </div> </div> </body> </html>
    use strict;
    use warnings;
    
    {
        package MyApp;
        use base 'Squatting';
        use base 'Squatting::On::CGI';
    }
    
    { 
        package MyApp::Controllers;
        use Squatting ':controllers';
    
        our @C = (
            C(
                Index => [ '/' ],
                get   => sub { 
                    my ( $self ) = @_;
                    my $v = $self->v;
                    $v->{say} = 'hello world!';
                    $self->render( 'hello' );
                },
            ),
        );
    }
    
    {
        package MyApp::Views;
        use Squatting ':views';
        use HTML::AsSubs;
    
        our @V = (
            V(  'html',
    
                layout => sub { 
                    my ( $self, $v, @yield ) = @_;
                    html (
                        head ( title( 'My CGI App' ) ),
                        body ( @yield ),
                    )->as_HTML;
                },
    
                hello => sub {
                    my ( $self, $v ) = @_;
                    p ( $v->{say} );
                },
            ),
        );
    }
    
    use CGI;
    my $q = CGI->new;
    MyApp->init;
    MyApp->relocate('/cgi-bin/myapp.cgi');
    MyApp->cgi($q);