Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Perl: "error: Bad file descriptor" при require

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Perl: "error: Bad file descriptor" при require
Имя
Сообщение << Старые топики   Новые топики >>
Perl: "error: Bad file descriptor" при require - 2007-04-05 23:44:54.860000   
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-&gt;_Init(@_);     return $self; } sub _Init {     my $self=shift;     $self-&gt;{'LIBDIR'}='';     $self-&gt;{'LIBMINSIZE'}=200;     if (@_) {         my %extra=@_;         @$self{keys %extra}=values %extra;     }     %extra=();     undef %extra; } sub SetPair {     my $self=shift;     $self-&gt;{shift}=shift() if ($_[0] && $_[1]); } sub Load {     my $self=shift;     my (@LibList,$i,$SizeOf);     $SizeOf=@_;     foreach ($i=0;$i&lt;$SizeOf;$i++) {         $LibList[$i]=shift;     }     for ($i=0;$i&lt;$SizeOf;$i++) {         $self-&gt;{'LOADSTATUS'}[$i][0]=$LibList[$i];         $LibList[$i]=~s/::/\//g; [b]        eval (require "$self-&gt;{'LIBDIR'}/$LibList[$i].pm") if ($self-&gt;_TestFile("$self-&gt;{'LIBDIR'}/$LibList[$i].pm"));         if ($!) {             $self-&gt;{'LOADSTATUS'}[$i][1]="error: $!";         } else {             $self-&gt;{'LOADSTATUS'}[$i][1]='ok';         }[/b]     }     return "$self-&gt;{'LIBDIR'}/$LibList[0].pm"; # Test } sub _TestFile {     my $self=shift;     my $file=shift;     $file=~s/\|//g;     if (-e $file && (-s $file)&gt;=$self-&gt;{'LIBMINSIZE'}) {         return 1;     } else {         return 0;     } } 1;
В коде основного скрипта:
# Loading FrameWork require './FrameWork.pm'; # Chosing needed libraries manually our $FrameWork=FrameWork-&gt;new(LIBDIR =&gt; './FrameWork'); my $c=$FrameWork-&gt;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-&gt;{'LOADSTATUS'}}) {     print "$_-&gt;[0]\t\t$_-&gt;[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 можно не вспоминать.

Можно конечно и забыть про этот вопрос, тем не менее хочется разобраться.
Post #: 1
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Perl: "error: Bad file descriptor" при require







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.