我正在使用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请求 - 响应过程中共享。但为什么会这样呢?你能解释一下吗?
答案 0 :(得分:4)
“似乎变量var在两个请求 - 响应进程中共享”,因为它是。 our
关键字声明包全局。您在持久环境中运行您的Dancer应用程序,您的全局变量也是持久的。您需要在每个请求开头重置任何our
变量。