在Perl Web应用程序中,“我们的”变量在不同的Web请求响应中共享?

时间:2013-04-11 05:40:08

标签: perl variables web-applications dancer

我正在使用Dancer在Perl中编写一个Web应用程序。假设我在our中声明了$var变量A.pm,并将file1的内容分配给它:

sub get_file_content {
    our $var = <FILE1>;
}

我将var声明为our,因为我希望稍后在另一个文件B.pm中使用它:

sub display_file_content {
    &display($A::var);
} 

因此,在get_file_content执行后,$var应该是file1的内容。在执行display_file_content之前,我更改了file1的内容,然后单击了一些按钮来执行display_file_content。如所料,显示了file1的原始内容。

然后我做了同样的事情,除了在更改file1的内容后,我没有点击display_file_content按钮。相反,我在另一个Web浏览器中为同一页面启动另一个Web请求。我先执行get_file_content,然后点击按钮直接浏览display_file_content。 file1的修改内容显示在第二个Web浏览器中。这个是正常的。但是,当我单击第一个Web浏览器中的显示按钮时,它还会显示已修改的内容,而不是原始内容。作为与另一个Web浏览器中没有第二个Web请求的第一个实验的比较,似乎变量$var在Web请求 - 响应过程中共享。但为什么会这样呢?你能解释一下吗?

1 个答案:

答案 0 :(得分:4)

“似乎变量var在两个请求 - 响应进程中共享”,因为它是。 our关键字声明包全局。您在持久环境中运行您的Dancer应用程序,您的全局变量也是持久的。您需要在每个请求开头重置任何our变量。