GoDleSS
Сообщений: 35
Оценки: 0
Присоединился: 2007-02-27 02:47:18.046666
|
Доброго времени суток уважаемые форумчане! Вот опять туплю на почти пустом месте, но ничего поделать не могу ( Есть простейщий FrameWork загрузчик(даже без автолоада).
package FrameWork;
our $VERSION='1.0';
sub new {
my $class=shift;
my $self={};
bless($self, $class);
$self->_Init(@_);
return $self;
}
sub _Init {
my $self=shift;
$self->{'LIBDIR'}='';
$self->{'LIBMINSIZE'}=200;
if (@_) {
my %extra=@_;
@$self{keys %extra}=values %extra;
}
%extra=();
undef %extra;
}
sub SetPair {
my $self=shift;
$self->{shift}=shift() if ($_[0] && $_[1]);
}
sub Load {
my $self=shift;
my (@LibList,$i,$SizeOf);
$SizeOf=@_;
foreach ($i=0;$i<$SizeOf;$i++) {
$LibList[$i]=shift;
}
for ($i=0;$i<$SizeOf;$i++) {
$self->{'LOADSTATUS'}[$i][0]=$LibList[$i];
$LibList[$i]=~s/::/\//g;
[b] eval (require "$self->{'LIBDIR'}/$LibList[$i].pm") if ($self->_TestFile("$self->{'LIBDIR'}/$LibList[$i].pm"));
if ($!) {
$self->{'LOADSTATUS'}[$i][1]="error: $!";
} else {
$self->{'LOADSTATUS'}[$i][1]='ok';
}[/b]
}
return "$self->{'LIBDIR'}/$LibList[0].pm"; # Test
}
sub _TestFile {
my $self=shift;
my $file=shift;
$file=~s/\|//g;
if (-e $file && (-s $file)>=$self->{'LIBMINSIZE'}) {
return 1;
} else {
return 0;
}
}
1;
В коде основного скрипта:
# Loading FrameWork
require './FrameWork.pm';
# Chosing needed libraries manually
our $FrameWork=FrameWork->new(LIBDIR => './FrameWork');
my $c=$FrameWork->Load('IO::Config', 'IO::File', 'IO::PCGI', 'IO::DBFile', 'Net::HTTP', 'Defense::AntiScan');
# Test
print "Content-type:text/plain\n\n$c\n";
foreach (@{$FrameWork->{'LOADSTATUS'}}) {
print "$_->[0]\t\t$_->[1]\n";
}
На выходе получаю:
./FrameWork/IO/Config.pm
IO::Config error: Bad file descriptor
IO::File error: Bad file descriptor
IO::PCGI error: Bad file descriptor
IO::DBFile error: Bad file descriptor
Net::HTTP error: Bad file descriptor
Defense::AntiScan error: Bad file descriptor
При этом, если убираю 1; в конце любой из библиотек, то получаю "./FrameWork/IO/DBFile.pm did not return a true value at ./FrameWork.pm line 40." Т.е. файлы то читаются, так почему же "Bad file descriptor" возникает? При этом тест показывает, что библиотеки нормально работают! Все тестируется под Windows, так что о Chmod можно не вспоминать. Можно конечно и забыть про этот вопрос, тем не менее хочется разобраться.
|