Dancer2 在 get 协议上的奇怪行为

Dancer2 strange behaviour on get protocol

我正在构建一个使用 dancer2 作为后端工具的网络应用程序。我已经实现了如下主要方法:

#!/usr/bin/env perl
use Dancer2;

get '/mything/:text' => sub {
    my @myArray = ("");
    # Fill the array with DB data;
    return join "<br>", @myArray;
};

dance;

一切正常,直到第二次使用get方法。 Insted of @myArray 是空的,它从第一次执行开始填充。

作为一个肮脏的修复,我在方法的末尾将 @myArray 初始化为 (""),但我认为这很丑陋。你有这方面的经验吗?

为了对此进行测试,我将您的代码扩展为以下内容:

#!/usr/bin/env perl
use Dancer2;

get '/mything/:text' => sub {
    my @myArray = localtime;
    # Fill the array with DB data;
    return join "<br>", @myArray;
};

dance;

使用 localtime() 是我能想到的最简单的方法,每次发出请求时(假设我一秒钟发出的请求不超过一个)得到一个(稍微)不同的数组。

这完全符合我的预期。我 运行 plackup app.psgi 并访问 http://localhost:5000/mything/foo 并且我看到了我期望的数组。当我刷新页面时,我得到一个不同的数组。

所以 Dancer 的工作方式与我预期的一样。如果您看到不同的行为,那是因为您正在做不同的事情。在我们看到更多您的代码之前,我们无法真正帮助您弄清楚那是什么。

问题与未在严格模式下使用 perl 有关。代码原样在 OSX 11.1 中正常工作,但在 Ubuntu 16.04 中不能正常工作。所以经过一些测试,我发现我用来从数据库中填充数组的一些变量没有正确初始化。初始化它们后,在 OSX 和 Ubuntu.

中一切正常