Perl Dancer2 get协议上的奇怪行为

Perl Dancer2 get协议上的奇怪行为,perl,backend,dancer,Perl,Backend,Dancer,我正在使用dancer2作为后端工具构建一个Web应用程序。我实现了以下主要方法: #!/usr/bin/env perl use Dancer2; get '/mything/:text' => sub { my @myArray = (""); # Fill the array with DB data; return join "<br>", @myArray; }; dance; 在第二次使用get方法之前,一切正常。@myArray不是空

我正在使用dancer2作为后端工具构建一个Web应用程序。我实现了以下主要方法:

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

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

dance;
在第二次使用get方法之前,一切正常。@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并访问,我看到了我期望的阵列。当我刷新页面时,我会得到一个不同的数组


所以舞者的工作就像我期望的那样。如果你看到不同的行为,那是因为你做了不同的事情。在我们看到更多的代码之前,我们无法真正帮助您解决这个问题。

问题与不在严格模式下使用perl有关。代码在OSX11.1中正常工作,但在Ubuntu 16.04中却没有。所以在一些测试之后,我发现我用来从DB填充数组的一些变量没有正确初始化。初始化后,OSX和Ubuntu中的一切都正常工作。

我想你需要向我们展示填充@myArray的代码。顺便说一句,@myArray=[]并没有做您认为它正在做的事情。你可能想要@myArray=代替。是的,你说得对。我使用初始化数组,因为我希望它包含一个作为第一个元素的元素。感谢您再次发现错误@DaveCross,您是对的。我使用localtime复制了这个示例,它按预期工作。由于隐私原因,我无法共享实际的代码,但是没有比我发布的内容更多的内容。如果您无法显示填充数组的代码,那么我认为我们无法为您提供更多帮助。最后我发现了我的问题。你可以在公认的答案上查一查,这并不能真正解释为什么OSX和Linux之间存在差异。你有更多的信息吗?@DaveCross不,我没有。我发现Perl在OSX中处理内存的方式与在Linux中不同。不管怎样,如果你想让我做一些测试,请告诉我