当与 Starman 一起运行时,我无法找到在 Dancer 应用程序中使用包变量(或任何类型的变量)的方法。我想它在某种程度上与 Starman 的预分叉有关,但这应该是一个特性,而不是一个错误。
以下是 Dancer 应用程序示例:
package nafig;
use Dancer;
my $a = 0;
$b = 0;
$nafig::c = 0;
any '/' => sub {
warn join " ", $a++, $b++, $nafig::c++;
};
start;
然后我连续 3 次调用该应用程序。首先,我使用 plack 参考服务器运行它,一切都按预期工作:
$ plackup app.pl
HTTP::Server::PSGI: Accepting connections at http://0:5000/
0 0 0 at ... blah-blah-blah
1 1 1 at ... blah-blah-blah
2 2 2 at ... blah-blah-blah
但是当我对 Starman 做同样的事情时,我得到以下结果。
$ plackup -s Starman app.pl
2013/11/17-23:33:35 Starman::Server (type Net::Server::PreFork) starting! pid(527)
Resolved [*]:5000 to [::]:5000, IPv6
Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6
Binding to TCP port 5000 on host :: with IPv6
Setting gid to "1000 1000 20 24 25 29 30 44 46 108 109 115 121 1000"
Starman: Accepting connections at http://*:5000/
0 0 0 at ... blah-blah-blah
0 0 0 at ... blah-blah-blah
0 0 0 at ... blah-blah-blah
但是,当快速刷新页面时,有时值会按预期递增。我想,在这些情况下,Starman 仍然处于同一个分支中。
我很惊讶以前从未在 stackoverflow 上问过这个问题。持久变量对我来说似乎很有用,没有它们人们怎么跳舞?
提前感谢您的帮助。