我想在一个模块中设置一个来自一个调用模块的变量,并希望在另一个调用模块中检索该值。
我做了一些事情:
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。
我的实施有什么问题?
答案 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)以获取示例。