Для отладки Win32 утечек памяти у меня был очень хороший опыт с простой "кучей" Отладки CRT, которая стала lib с Визуальным C.
В Отладочная сборка malloc (и др.) переопределена как _malloc_dbg (и др.) и существуют другие вызовы для получения результатов, которые все не определены, если _DEBUG не установлен. Это настраивает все виды граничной защиты на "куче" и позволяет Вам diplay результаты в любое время.
у меня было несколько ложных положительных сторон, когда я обвинял стандартные программы некоторого времени, которые смешали с выделениями времени выполнения библиотеки, пока я не обнаружил _CRT_BLOCK.
я должен был произвести первый DOS, затем консоль Win32 и сервисы, которые будут работать навсегда. Насколько я знаю, что нет никаких утечек памяти, и в по крайней мере одном помещают код, выполненный в течение двух лет, необслуживаемых перед монитором на отказавшем ПК (хотя ПК был прекрасен!).
eval "use Module; 1" or die "you need Module to run this program".
или
require Module or die "you need Module to run this program";
Module->import;
или
use Module::Load;
eval { load Module; 1 } or die "you need Module to run this program";
Вы можете найти Module :: Load на CPAN .
]Вы можете использовать Module :: Load :: Conditional
use Module::Load::Conditional qw[can_load check_install requires];
my $use_list = {
CPANPLUS => 0.05,
LWP => 5.60,
'Test::More' => undef,
};
if(can_load( modules => $use_list ))
{
print 'all modules loaded successfully';
}
else
{
print 'failed to load required modules';
}
use strict; use warnings; use Module;
Если у вас не установлен модуль, вы получите сообщение об ошибке «Не удается найти Module.pm в @INC (@INC содержит: ...)». что достаточно понятно.
Есть ли какая-то конкретная причина, по которой вы хотите / нуждаетесь в более конкретном сообщении?
Примерно так, используйте Net :: SMTP
, если у вас установлен модуль, или дурацкую выноску sendmail
в крайнем случае.
my $mailmethod = eval "use Net::SMTP; 1" ? 'perl' : 'sendmail';
]