如果模块包含__DATA__,它将被锁定

时间:2019-01-21 14:52:26

标签: perl

我有一个主模块,该模块导入其他模块并启动一个应用程序,然后退出。打开应用程序后,它将锁定导入的模块之一,该模块的末尾包含__DATA__

main.pm

use core::test;
system("start notepad");

core / test.pm

package core::test;

1;
__DATA__
dummy

如果我删除了__DATA__部分,则该模块不再被打开的记事本进程锁定。

我正在使用ActivePerl 5163

为什么会发生这种情况,以及如何解决此问题以使模块没有锁定?

1 个答案:

答案 0 :(得分:6)

不是notepad.exe,而是Perl使*DATA文件句柄保持打开状态。如果您不希望其保持打开状态或锁定状态,则必须删除__DATA__部分或明确地close *core::test::DATA

在遇到__DATA__部分时,Perl在读取/编译文件时会将文件保持打开状态。请参阅perldata中__DATA__上的部分,其中描述了此行为。

这里也记录了关闭文件句柄的方法。