如果模块包含__DATA__则会被锁定

Gar*_*ite 2 perl

我有一个主模块导入其他模块并启动一个应用程序,然后退出.打开应用程序时,它会锁定最后包含的导入模块之一__DATA__.

main.pm

use core::test;
system("start notepad");
Run Code Online (Sandbox Code Playgroud)

核心/ test.pm

package core::test;

1;
__DATA__
dummy
Run Code Online (Sandbox Code Playgroud)

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

我正在使用ActivePerl 5163.

为什么会发生这种情况我怎么能解决这个问题没有锁定模块?

Cor*_*ion 6

它不是notepad.exePerl保持*DATA文件句柄打开.如果您不希望它保持打开/锁定,您必须删除该__DATA__部分或明确删除close *core::test::DATA.

一旦遇到该__DATA__部分,Perl会在读取/编译文件时保持文件处于打开状态.请参阅__DATA__perldata中有关此行为的部分.

关闭文件句柄的方法也在那里记录.