|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ilia Vinokurov 2:5020/400 16 Dec 2005 13:05:29 To : All Subject : Как выгрузить модуль ? --------------------------------------------------------------------------------
Hello, All!
Задача - нужно в работающей программе подгружать модули и при этом
отслеживать их mtime. При изменении времени модификации перегрузить модуль.
За это у меня ответственны 2 метода:
sub run_controllers {
my($self, $type, $prm) = @_;
$type = lc($type);
my $c = $self->{'SUB_CONTROLLERS'}{$type};
my $cmtime = $self->cTime($type);
if( (not defined $c) || (not defined $cmtime) || ($c->[1]!=$cmtime) ){
my $rStr = qq|
require CONTROLLERS::$type;
return CONTROLLERS::$type->new();
|;
$c->[0] = eval($rStr);
return $@ if $@;
$c->[1] = $cmtime;
$self->{'SUB_CONTROLLERS'}{$type} = $c;
};
return $c->[0]->parseContent($prm);
};
# Возвращает время модификации модуля.
sub cTime {
my ( $self, $cName ) = @_;
$cName =~ s/\:\:/\//gso;
foreach my $path ( @INC ){
my $fName = "$path/CONTROLLERS/$cName.pm";
my @st = stat $fName;
return $st[9] if scalar @st > 0;
};
return;
};
Проблема в том, что код импортируется и компилируется только в первый раз.
Во второй раз (когда модуль модифицирован) код не заменяется на новый.
Соответственно проблема в удалении старого пакета и подгрузке
модифицированного.
Покопался в Apache::Registry так там используется
undef &mysub;
Как сделать undef PACKEGE я не знаю :-( use strict ругается по-черному :-)
У кого имеются какие соображения ?
С удовольствием наберу perldoc чего-нить, только чего ?
With best regards, Ilia Vinokurov. E-mail: ilvin@ilvin.msk.ru
--- ifmail v.2.15dev5.3
* Origin: COMSTAR Telecommunications (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/121684fbbfbb4.html, оценка из 5, голосов 10
|