2

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

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

我声明varour因为我想稍后在另一个文件中使用它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 请求的第一个实验相比,该变量似乎$var在 Web 请求 - 响应过程中是共享的。但为什么会这样?你能给出一些解释吗?

4

1 回答 1

4

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

于 2013-04-11T05:44:28.530 回答