Perl BEGIN块可以传播病毒还是丢失数据?

时间:2009-10-02 20:34:02

标签: perl compilation

我还是Perl的新手。由于在编译期间运行BEGIN块,因此只需编译就不能传播病毒或丢失数据? Perl有什么办法阻止它吗?如果是这样的话,那么BEGIN块中的代码可能会在其外部采取不同的行为吗?

3 个答案:

答案 0 :(得分:13)

对所有这些问题都是肯定的。 Eclipse IDE易受此攻击。它discussed in more detail here

与所有软件一样,您应该避免从您不信任的来源下载和运行任何内容。 CPAN通常值得信赖;虽然我不知道有人故意向CPAN发布流氓代码,但它可能已经发生了。

您可以避免在使用$^C flag进行编译检查期间运行代码,例如:

BEGIN { load_data_from_db() unless $^C; }

答案 1 :(得分:2)

chromatic解释how a Perl program works

答案 2 :(得分:1)

请注意,有时这是一项功能。 mod_perl模块内的BEGIN块只在首次加载时执行一次。因此,您可以使用简单的语法在同一个脚本中执行页面级初始化,并将其置于其协助的代码“附近”。

有时候,编写复杂的初始化代码同样有用,你不想把它放在脚本的顶部。

但主要是它与awk的主题兼容性。