perl模块中的静态变量

时间:2014-12-08 05:16:02

标签: perl perl-module perl-data-structures activeperl

我想在一个模块中设置一个来自一个调用模块的变量,并希望在另一个调用模块中检索该值。

我做了一些事情:

package Test;

our $data = undef;

sub set_data
{
    $data = shift @_;
}

sub get_data
{
    return $data
}

我将数据设置为:

package Mod1;
use Test;

Test::set_data(1);

我正在检索数据:

package Mod2;
use Test;

print Test::get_data();

但是我在检索值时会得到undef。

我的实施有什么问题?

3 个答案:

答案 0 :(得分:1)

我已经找到了问题所在。设定者代码

package Mod1;
use Test;

Test::set_data(1);

正在线程函数中运行。 我发现在函数内部变量的状态正在按预期变化,我也可以访问最新的数据。

一旦我离开了线程函数,变量的值就不再存在了。我加入所有正在运行的线程之后,我对线程函数的意思是什么。

答案 1 :(得分:0)

在set_data的末尾添加一些调试(例如warn "setting data to $data";,在get_data的开头添加warn "getting data: $data";,并按照您认为的顺序验证事情。

请注意,模块的主代码(get_data和set_data调用都是)在编译时加载模块时运行;如果您依赖于在运行时发生的其他事情来获取值,那将无效。

如果所有其他方法都失败了,请删除尽可能多的代码并仍然失败并向我们展示竞争失败的情况(包括任何加载Mod1和Mod2)。

答案 2 :(得分:0)

当我必须这样做时,我通常会帮助Storable。您可以使用该方法。

请参阅此答案(https://stackoverflow.com/a/17082242/257635)以获取示例。