Модуль блокируется, если он содержит __DATA__ - PullRequest
0 голосов
/ 21 января 2019

У меня есть основной модуль, который импортирует другие модули и запускает приложение, затем оно выходит.Когда приложение открыто, оно блокирует один из импортированных модулей, в конце которого содержится __DATA__.

main.pm

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

core/test.pm

package core::test;

1;
__DATA__
dummy

Если я удаляю секцию __DATA__, модуль больше не блокируется открытым процессом блокнота.

Я использую ActivePerl 5163.

Почему это происходит и как я могу исправить это поведение, чтобы не было заблокированных модулей?

1 Ответ

0 голосов
/ 21 января 2019

Это не notepad.exe, а Perl, который держит файловый дескриптор *DATA открытым. Вы должны либо удалить раздел __DATA__, либо явно close *core::test::DATA, если не хотите, чтобы он оставался открытым / заблокированным.

Perl сохраняет файл открытым при чтении / компиляции, как только он сталкивается с разделом __DATA__. См. Раздел __DATA__ в perldata, где описано это поведение.

Здесь также описан подход закрытия дескриптора файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...