【发布时间】:2018-07-19 07:35:46
【问题描述】:
我们有一个用于执行维护的 Perl 脚本。我需要对其进行修改以处理更多任务。问题是脚本编译好了,源码早就丢失了。
我尝试使用 B::Deparse 来重新创建文件,但 Deparse 并不完美,并且输出被破坏(以及非常大的约 5000 行已解析代码)。
在阅读了解析后的代码后,我发现我需要修改一个函数。编译后的脚本会加载一个纯文本脚本模块,因此我更改了模块以覆盖该函数并执行我需要它执行的任务。现在的问题是我无法访问主脚本“我的”变量。
这是一个例子:
# main.pl
my $a = 1;
sub call_me {
print "unmodified";
}
use MOD;
call_me;
MOD.pm
package MOD;
main::{'call_me'} = sub {
print "\$main::a = $main::a\n";
}
结果是:“$main::a =”而不是得到真正的值。
提前致谢。
【问题讨论】:
-
与包全局变量相比,词法变量 (
my) 不会出现在包的符号表中。所以这是一个困难但有趣的... #旁注:如果我没记错的话,你可以简单地写 sub main::call_me {...}。 -
“编译脚本”是什么意思。你是说打包好的?
-
我同意 ikegami 的观点,可能有一些方法可以恢复该脚本,但要知道,我们需要知道您所说的“已编译”是什么意思。
标签: perl