Как я могу найти DynaLoader сопоставление имен модулей с непрозрачными указателями?
Согласно документации на DynaLoader
dl_unload_file()
Динамически разгрузиться$libref
, которая должна быть непрозрачной "библиотечной ссылкой", возвращаемой изdl_load_file
, Возвращает единицу в случае успеха и ноль в случае неудачи. Эта функция является необязательной и может не обязательно предоставляться на всех платформах.
Так dl_load_file
возвращает эти непрозрачные ссылки. Но что, если мой файл не был загружен явным вызовом dl_unload_file
как мне тогда узнать эти ссылки?
1 ответ
Решение
Вы можете найти эти ссылки, используя следующие переменные, как описано в источнике
@dl_shared_objects = (); # shared objects for symbols we have
@dl_librefs = (); # things we have loaded
@dl_modules = (); # Modules we have loaded
Однако сопоставление их с именем библиотеки остается для пользователя упражнением, хотя кажется, что они чувствительны к индексу в этих трех массивах. Вы можете сделать это так,
my %db;
foreach my $i ( 0 .. $#DynaLoader::dl_librefs ) {
$db{$DynaLoader::dl_modules[$i]} = {
dl_shared_objects => $DynaLoader::dl_shared_objects[$i],
dl_librefs => $DynaLoader::dl_librefs[$i],
dl_modules => $DynaLoader::dl_modules[$i]
};
}