我发现了一些相关的问题,比如Python与Perl(现已删除)和Perl值得吗?(现已删除),但我似乎无法找到任何直接解决此问题的内容.
Perl有合法的未来吗?我现在在Perl商店工作,而且我来自PHP,因此我在服务器级别做事时看到了一种可以说是"低级"语言的一些优点,但在我看来Perl中的很多任务可以在PHP中更快地执行,以及一些ARGUE(主观的,不是我的观点)认为Python以更明确的方式执行这些任务更容易维护.
在我的简历上有这份工作最终会让我减少就业,特别是如果语言不再增长?
编辑{澄清} Cade Roux和Telemachus都提出了关于您的未来是否可以通过简历定义的好点.
说实话,当我的一位前雇主说"我不雇用Perl任何人作为他们的最后一份工作时,就会提起这件事.那就是OLD技术." 这是一个PHP商店,所以拿出一点点盐.
现在,在没有诽谤我的前任雇主的情况下,她根本不是技术人员,所以她真的表达了一个非专业人士的意见,在这种情况下,我的问题更像是"这种特殊技术是否存在耻辱"那些不使用它的人?",特别是那些可能已经过类似雇主经历过的人.我不是要求你用魔术玻璃来展望未来,假设下一个"热门"的语言会是什么,而是如果这种特殊的语言(被指责为发育迟缓的增长,再次受到外行人士)的负面含义它.
我希望这更有意义.
例如,它是更安全的使用mod_php,而不是php-cgi?或者使用它mod_perl而不是传统更安全cgi-scripts?
我主要对安全问题感兴趣,但如果存在显着差异,速度可能会成为一个问题.
我正在使用Perl开发一个带有一些C的Web应用程序,这对于一些重载数字运算来说是必要的.到目前为止我遇到的主要问题是试图决定是否应该使用mod-perl,mod-fastcgi或两者来运行我的脚本,因为我很难分析每个mod的优点和缺点.
任何人都可以发布摘要或提供一个链接,我可以找到一些比较信息,也许一些建议与示例?
短版:
我应该使用什么标准来评估Perl"app server"(mod_perl替换)的可能候选者?
我们正在寻找某种框架,它允许重复执行各种Perl程序(作为服务),而无需支付以下费用:
每次执行时重新启动perl解释器一次
每次执行一次加载/编译Perl模块
(这两个都是运行mod_perl提供的好处)
笔记:
我们并不太关心mod_perl提供的任何额外好处,例如深度Apache集成.
这将是一个纯粹的应用程序服务器,这意味着不需要任何特定于Web的功能(如果应用程序服务器提供它,则不会出现问题,只是不需要).
我们当然会考虑明显的标准(原始速度,生产就绪稳定性,主动开发,在我们关心的操作系统上运行的能力).我感兴趣的是我们可能希望从这样的框架/服务器中获得的不那么微不足道和微妙的东西.
背景:
在$ work,决定他们想要替换当前情况的权力(简单的webapps在Embperl中开发并通过Apache/mod_perl部署).
决定使用(本土)MVC系统,该系统将具有View的Java Spring前端; 并且Controller会将后端服务请求分解为执行模型职责的每个应用程序服务(不要挂在这个细节上 - 它与主要问题不太相关).
后端服务的一个选项是Perl,因此我们可以利用我们现有的所有Perl IP(库,webapp后端代码),而不必将其100%移植到Java.
总结一下:
| View | Model/app | Model loaded/executed by: |
================================================================================
OLD | Empberl | Model.pm | mod_perl has Model.pm loaded, called from view.epl |
NEW | Java | Model.pm | perl generic_model.pl -model Model (does "require") |
================================================================================
Run Code Online (Sandbox Code Playgroud)
现在,那些在一段时间内进行Perl Web开发的人会立即注意到新设计中最明显的问题:
| Perl interpreter starts | Perl modules are loaded and compiled |
=======================================================================
OLD | Once per …Run Code Online (Sandbox Code Playgroud) 我试图找出是否有办法在mod_perl 2下完成响应而不返回主处理程序.到目前为止,还没有在文档中找到方法.以下是我正在尝试实现的示例:
#!/usr/bin/perl
# This is some mod_perl handler
use strict;
use warnings;
use Apache2::Const ':common';
sub handler {
my $r = shift;
if ($r->method eq 'POST') {
# just to do something as example
do_post_response($r);
}
$r->content_type('text/plain');
print "Thank you, goodbye.";
return Apache2::Const::OK;
}
sub do_post_response {
my $r = shift;
unless (check_somthing()) {
# Suppose I find a situation that requires
# a different response than normal...
$r->content_type('text/plain');
print "We have a situation...";
$r->something_to_finish_the_request_immediatly(Apache2::Const::OK);
}
}
Run Code Online (Sandbox Code Playgroud)
在一个常规的Perl脚本中,单独运行或在mod_cgi下运行,我可以exit() …
我对这个感到茫然.我看了很多,似乎有很多解决方案,但它们并不适合我.我有一个CGI :: Application应用程序生成一个带有Spreadsheet :: WriteExcel的MS Excel电子表格.这个工作正常一段时间,直到我们的实时服务器在几周前出现硬件故障.我们使用中断作为升级到Windows Server 2008(从2003年)和Apache 2.2.17(从2.2.11)升级的借口.现在,我在尝试下载电子表格时收到来自此错误的客户的投诉是零星的(但是经常被忽视):
Internet Explorer无法从[site]下载[url].
Internet Explorer无法打开此Internet站点.请求的网站不可用或无法找到.请稍后再试.
我在XP,Vista和7上尝试过IE 7-8,并且无法在本地重现此错误.有问题的用户每次都有,而不是随机.所有投诉都来自IE用户,主要是IE8.
在阅读了几条关于错误消息的帖子后,我添加了-expires标题无济于事.(没有办法直接测试,我必须实施修复并等待一天左右,看看人们是否停止抱怨._.)
sub export_spreadsheet {
my $self = shift;
binmode STDOUT;
my $str;
open my $fh, '>', \$str;
my $workbook = Spreadsheet::WriteExcel->new($fh);
# words words words
$workbook->close;
close $fh;
$self->header_add(-type => 'application/vnd.ms-excel',
-expires => '+1d',
-attachment => 'export.xls');
return $str;
}
Run Code Online (Sandbox Code Playgroud)
请求的标头看起来很正常.这些都是在我的本地机器上收集的,请注意.
HTTP/1.1 200 OK
Date: Tue, 31 May 2011 22:23:17 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o mod_perl/2.0.4-dev Perl/v5.10.1
Expires: Wed, 01 …Run Code Online (Sandbox Code Playgroud) 我正在做一些与mod_perl-Apache-Perl兼容性相关的研究.最近我尝试使用Perl 5.14.2构建mod_perl 2.0.4.编译阶段提前终止并出现错误:
modperl_perl.c: In function ‘modperl_perl_core_global_init’:
modperl_perl.c:58:9: error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)
在这个地方写下面的代码:
GvCV(gv) = get_cv(cglobals->sub_name, TRUE);
Run Code Online (Sandbox Code Playgroud)
搜索可能产生此错误的内容,我发现以前版本的Perl和Perl 5.14(CORE/gv.h)之间存在差异:
#define GvCV(gv) (GvGP(gv)->gp_cv) /* previous versions */
Run Code Online (Sandbox Code Playgroud)
VS
#define GvCV(gv) (0+GvGP(gv)->gp_cv) /* in Perl 5.14 */
Run Code Online (Sandbox Code Playgroud)
0+从定义中删除它允许mod_perl 2.0.4成功编译,这很好,因为与以前的版本相比,0+...它不被识别为左值.
为什么0+在GvCV的定义中使用并且是否有必要?或者删除它是否安全,并且GvCV(gv)在以前的Perl版本中有类似的定义?
现在我们有一个大型的perl应用程序,它使用原始DBI连接到MySQL并执行SQL语句.它每次都创建一个连接并终止.开始接近mysql的连接限制(一次200)
看起来DBIx :: Connection支持应用程序层连接池.
有没有人有过经历DBIx::Connection?连接池是否还有其他注意事项?
我还看到mod_dbd哪个是Apache mod,它看起来像处理连接池.
http://httpd.apache.org/docs/2.1/mod/mod_dbd.html
随着OS X 10.10 Yosemite的发布,Apple将其Apache服务器升级到2.4版本.
在发布时,mod_perl 2.0.8与Apache 2.4不兼容,mod_perl 2.0.9尚未正式发布(更多信息).
所以,Apache没有mod_perl.
我使用perl在网站上本地工作,需要安装mod_perl.
我是一名经验丰富的程序员,但我之前从未做过这样的事情,只有我的主机才能工作.我不介意花一些时间来解决这个问题,但我承担不起我本地服务器的费用.
如何在OS X Yosemite上安装mod_perl?
子问题:
我在bash方面经验丰富,使用终端很舒服.
我在Debian 8上运行PHP 5.6.17和Apache 2.4.10.
我想$_SERVER['REMOTE_USER']用Windows用户名填充PHP变量,如果用户名在我的数据库中,则登录用户.我对此方法涉及的安全风险感到满意,因为这只会暴露在本地网络上.
这是我在Apache vhost定义中所做的:
<LocationMatch "/login/ssologin">
PerlAuthenHandler Apache2::AuthenNTLM
AuthBasicAuthoritative on
AuthType ntlm
AuthName "hello"
Require valid-user
PerlAddVar ntdomain "my.local"
PerlSetVar defaultdomain my.local
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmauthoritative off
PerlSetVar ntlmdebug 1
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
我将URL放入Internet Explorer中的受信任站点,但仍然提示我进行基本身份验证.
我错过了什么?
我唯一的目标是获取Windows会话的用户名.还有另一种更简单的方法吗?