Perl 社区中较为杰出的成员之一是 Matt Trout,他是 Shadowcat Systems 的技术总监。多年来,他一直在为 Perl 应用程序构建核心工具,包括作为 Catalyst MVC(模型、视图、控制器)Web 框架的共同维护者,DBIx::Class 对象管理系统的创建者等等。在生活中,他精力充沛、有趣、才华横溢,有时让人难以跟上他的节奏。当 Matt 编写代码时……嗯,想象一下一台失控的电锯,触发器被胶带粘住,安全功能被禁用。他开始行动了,你永远不知道会发生什么。几乎可以肯定两件事:该模块将精确地符合 Matt 心中的目的,并且它将出现在 CPAN 上供其他人使用。
Matt 的一个专用模块是 Web::Simple。它被誉为“构建简单 Web 应用程序的快速简便方法”,是一个精简的、极简主义的 Web 框架,具有易于学习的界面。Web::Simple 根本不是为大型应用程序设计的;但是,对于在低流量环境中执行一两件事的小工具来说,它可能是理想的选择。我还可以想象,如果您想为演示创建一个新应用程序的快速线框图,可以使用它进行快速原型设计。
安装,以及快速的“Howdy!”
您可以使用 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 条评论