【发布时间】:2014-11-24 21:06:34
【问题描述】:
我在将项目从 perl 5.8.8 更新到 perl 5.18.2 时遇到问题。
我已将问题简化为以下示例:
use threads;
my $key = "abcdef";
print "test1 key = $key.\n";
my $thr = threads->create(sub {
eval "print \"test2 key = \$key.\n\";";
});
$thr->join();
在 perl 5.8.8 中,这给出了正确的输出:
test1 key = abcdef.
test2 key = abcdef.
但是对于 perl 5.18.2,我有:
test1 key = abcdef.
test2 key = .
我尝试了其他 perl 版本,问题似乎出现在 5.14.0 版本中。 我正在寻找解决此问题的最佳方法,以及有关此 perl 行为修改的解释。
我找到了一些替代品,但它们似乎都不适合我:
- 使用“我们的 $key”而不是“我的 $key”;但这会使变量“更加公开”
- 添加“我的 $toto = $key;”在 eval 行之前(同时在 eval 行中仍然使用 $key);事实上,在 eval 行之前用 $key 做一些事情(打印、做作、使用......)似乎可以解决问题。但是添加的行对功能没有用。
在 eval 命令中使用 $key 而不是 \$key 对我来说不是一个解决方案,因为在实际程序中我将处理更复杂的结构。
【问题讨论】:
标签: multithreading perl eval