Perl 社区中较知名的成员之一是 Matt Trout,他是 Shadowcat Systems 的技术总监。多年来,他一直在为 Perl 应用程序构建核心工具,包括担任 Catalyst MVC(模型、视图、控制器)Web 框架的共同维护者,DBIx::Class 对象管理系统的创建者,以及更多。在个人方面,他精力充沛、有趣、才华横溢,有时难以跟上他的步伐。当 Matt 编写代码时……可以想象成一台失控的电锯,扳机被胶带粘住,安全功能被禁用。他已经开始行动,你永远无法确切知道会发生什么。几乎可以肯定两件事:该模块将精确地符合 Matt 心中的目的,并且它将出现在 CPAN 上供其他人使用。
Matt 的一个专用模块是 Web::Simple。它被称为“构建简单 Web 应用程序的快速简便方法”,是一个精简的、极简主义的 Web 框架,具有易于学习的界面。Web::Simple 完全不是为大型应用程序设计的;但是,对于在低流量环境中执行一两件事的小型工具来说,它可能是理想的选择。我还可以设想将其用于快速原型设计,如果您想为演示创建新应用程序的快速线框图。
安装,以及快速的“Hello!”
您可以使用 cpan
或 cpanm
安装该模块。一旦安装完成,您就可以编写简单的 Web 应用程序,而无需费心管理连接或任何其他内容——只需关注您的功能即可。这是一个快速示例
#!/usr/bin/perl
package HelloReader;
use Web::Simple;
sub dispatch_request {
GET => sub {
[ 200, [ 'Content-type', 'text/plain' ], [ 'Howdy, Opensource.com reader!' ] ]
},
'' => sub {
[ 405, [ 'Content-type', 'text/plain' ], [ 'You cannot do that, friend. Sorry.' ] ]
}
}
HelloReader->run_if_script;
有几件事需要立即注意。首先,我没有像通常那样 use strict
和 use warnings
。Web::Simple 为您导入了这些,因此您不必这样做。它还导入了 Moo,一个极简主义的 OO 框架,因此如果您了解 Moo 并想在此处使用它,您可以!系统的核心在于 dispatch_request
方法,您必须在应用程序中定义该方法。方法中的每个条目都是一个匹配字符串,后跟一个子例程,用于在字符串匹配时做出响应。子例程必须返回一个数组引用,其中包含对请求的回复的状态、标头和内容。
匹配
Web::Simple 中的匹配系统功能强大,允许进行复杂的匹配、在 URL 中传递参数、查询参数和扩展匹配,几乎可以以您想要的任何组合进行。正如您在上面的示例中看到的,以大写字母开头将匹配请求方法,您可以轻松地将其与路径匹配结合起来
'GET + /person/*' => sub {
my ($self, $person) = @_;
# write some code to retrieve and display a person
},
'POST + /person/* + %*' => sub {
my ($self, $person, $params) = @_;
# write some code to modify a person, perhaps
}
在后一种情况下,匹配的第三部分表明我们应该拾取所有 POST 参数,并将它们放在名为 $params
的哈希引用中,供子例程使用。在该部分匹配中使用 ?
而不是 %
将拾取查询参数,就像通常在 GET 请求中使用的那样。还有一个有用的导出子例程,称为 redispatch_to
。此工具允许您重定向,而无需使用 3xx 重定向;它在内部处理,用户不可见。所以
'GET + /some/url' => sub {
redispatch_to '/some/other/url';
}
对 /some/url
的 GET 请求将被处理,就好像它被发送到 /some/other/url
一样,而无需重定向,并且用户不会在其浏览器中看到重定向。
我只是浅尝辄止地介绍了这个模块。如果您正在为更大的项目寻找生产就绪的模块,那么最好选择 Dancer 或 Catalyst。但是凭借其轻量级和内置的 Moo 集成,Web::Simple 具有足够强大的功能,足以应对各种一次性任务和小型服务。
6 条评论