Всем привет. Суть вопроса: у меня есть несколько десятков перловых скриптов, которым нужны установленные перловые модули. Что бы каждый раз самому не ставить эти модули и не хранить где список этих модулей я решил отлавливать тот момент когда скрипт завершается с ошибкой о не найденном какой то перловом модуле.
С помощью Ромки, получилась вот такая конструкция:
cat /etc/perl/test1.pm
#!/usr/bin/perl
eval
{
require $_;
};
open(STDERR, "> logfile.log") or die "Error, i'm can't open log file...";
if($@)
{
$@ = ~m/"^Can't locate ([^.]+)pm in @INC"/;
print STDERR "Module '$1' is absent!\n";
print "FUCK, $@\n"; //это для теста ниже виден результат.
exec 'perl -MCPAN -e \'install "$mod_name"\'';
}
close(LOGFILE);
return 1;
cat test2.pl
#!/usr/bin/perl
use test1;
#use Navigator;
use Logging;
print "FUCK YOU MAMONT";
выполняем:
sudo perl test2.pl
FUCK, 4294967295
CPAN: Storable loaded ok
Going to read /home/mczim/.cpan/Metadata
Database was generated on Mon, 18 Aug 2008 01:02:45 GMT
Warning: Cannot install , don't know what it is.
Try the command
i //
to find objects with matching identifiers.
FUCK,
4294967295 --вот это расположено в $@ очень странно, тут должна храниться ошибка.
В общем чего я хочу? Я хочу в переменной $@ отловить ошибку, выбрать из нее название модуля и запустить установку оного.