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