我有一个主模块,该模块导入其他模块并启动一个应用程序,然后退出。打开应用程序后,它将锁定导入的模块之一,该模块的末尾包含__DATA__
。
main.pm
use core::test;
system("start notepad");
core / test.pm
package core::test;
1;
__DATA__
dummy
如果我删除了__DATA__
部分,则该模块不再被打开的记事本进程锁定。
我正在使用ActivePerl 5163
。
为什么会发生这种情况,以及如何解决此问题以使模块没有锁定?
答案 0 :(得分:6)
不是notepad.exe
,而是Perl使*DATA
文件句柄保持打开状态。如果您不希望其保持打开状态或锁定状态,则必须删除__DATA__
部分或明确地close *core::test::DATA
。
在遇到__DATA__
部分时,Perl在读取/编译文件时会将文件保持打开状态。请参阅perldata中__DATA__
上的部分,其中描述了此行为。
这里也记录了关闭文件句柄的方法。