Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Неработоспособность CGI::WebOut в Perl 5.8 (Алекс Стрeлeц)
Author Message
Алекс Стрeлeц
Участник форума



Joined: 11 Mar 2003
Posts: 29
Карма: 4
   поощрить/наказать

Location: Chicago, IL, USA

PostPosted: Thu Mar 13, 2003 7:22 am ()
   Post subject: Неработоспособность CGI::WebOut в Perl 5.8
Reply with quote

сабж^^^
Запуск файлов с подключенными модулями приводит к недопустимой операции и полному краху Перла. Система - WinXP, ActivePerl 5.8.0.805

Ну а вообще, кому-нибудь известен полный лист изменений в 5.8 перле? Похоже что много всего начало работать по другому. Или просто он падает из-за глючности первых версий?

Ждем четвертую редакцию Кэмелбука? :D
(Третья вышла исключительно из-за выхода 5.6 версии)
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Mar 13, 2003 6:03 pm (спустя 10 часов 40 минут)
   Post subject:
Reply with quote

Переношу тему в другой раздел.

Что касается неработоспособности модулей под 5.8, то это известная ошибка, но никак не дойдут руки посмотреть, в чем е там дело. Скорее всего, мелочь какая-нибудь, например, что-то где-то зацикливается.
Back to top
View user's profile Send private message Send e-mail
Алекс Стрeлeц
Участник форума



Joined: 11 Mar 2003
Posts: 29
Карма: 4
   поощрить/наказать

Location: Chicago, IL, USA

PostPosted: Thu Mar 13, 2003 8:54 pm (спустя 2 часа 51 минуту)
   Post subject:
Reply with quote

уупс, извиняюсь, не посмотрел куда тему создавал.

Дмитрий, а побыстрее посмотреть не можете? ;)

А то я уже третьий день Image::Magick ставлю. Под Вин он очень привередлив к своему местоположению, своей версии и версии перла. В итоге после десятка попыток, нормально фунциклировать он у меня начал только под 5.8 и в строго определенной директории. В чем кроется сия загадка, фиг его знает. Но руки его разработчикам я бы лично поотрывал :)

Кстати, вполне можно включить его в пакет расширений для Перла.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Mar 13, 2003 9:10 pm (спустя 16 минут)
   Post subject:
Reply with quote

Я уже думал об ImageMagick как о пакете. Но потом мне сказал один человек, что он без проблем ставится по ppm install Image::Magick...

Побыстрее — никак не могу, извините.
Да Вы бы быстрее сами отладили, там же не такой уж и страшный код.
Back to top
View user's profile Send private message Send e-mail
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Mon Mar 24, 2003 3:08 pm (спустя 10 дней 17 часов 57 минут)
   Post subject:
Reply with quote

sub Flush()
....
print THE_REAL_STDOUT $RootBuf;

он собака считает, что мы пишем в перехваченный STDOUT

ну и соответственно бесконечный цикл с геометрической прогрессией.

полумера:

добавить
    untie(*STDOUT);
перед
    print THE_REAL_STDOUT $RootBuf;

и использовать

    NoAutoflush();
Back to top
View user's profile Send private message
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Mon Mar 24, 2003 4:43 pm (спустя 1 час 34 минуты)
   Post subject:
Reply with quote

Более подробные действия для этой полумеры.
Я решил переименовать CGI::WebOut, мне так было удобнее.

1) Берем WebOut.pm переименовываем в gWebOut.pm
2) Кладем рядом с вызывающим скриптом (и соответственно в вызывающих скриптах поправить use)
3) package CGI::WebOut; -> package gWebOut;
4) комментируем

#use AutoLoader 'AUTOLOAD';
#return 1;
#__END__

ибо понимаю как это работает в общих чертах, а разбираться прямо щас некогда.

5) Вставляем
    untie(*STDOUT);

перед
    print THE_REAL_STDOUT $RootBuf;
и перед
    print THE_REAL_STDOUT join("\n",@Headers)."\n\n";

6) my $Buf=CGI::WebOut->new; -> my $Buf=gWebOut->new;

7) Обязательно используем NoAutoflush();

или для страховки

$UseAutoflush=1; -> $UseAutoflush=0;

sub SetAutoflush(;$){
my ($mode)=@_;

->

sub SetAutoflush(;$){
my $mode=0;

8) ждать от автора исправленного пакета.

9) может еще чего забыл, но вобщем, проект поднять удалось.

Last edited by Виктор Ганский aka GunSky on Fri Jun 20, 2003 12:31 pm; edited 1 time in total
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 24, 2003 5:35 pm (спустя 52 минуты)
   Post subject:
Reply with quote

Спасибо, что разобрались с причиной зацикливания. Это прекрасно.

А может, не трогать autoflush, а просто поставить:
Code (any language): скопировать код в буфер обмена
my $t = tied(*STDOUT);
untie *STDOUT;
print THE_REAL_STDOUT ...;
tie *STDOUT, $t;
В этом случае можно вообще упразднить THE_REAL_STDOUT и использовать везде вместо него обычный STDOUT. Видимо, в 5.8 связки для скопированных хэндлов сохраняются.
Back to top
View user's profile Send private message Send e-mail
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Mon Mar 24, 2003 5:54 pm (спустя 19 минут)
   Post subject:
Reply with quote

Я пробовал так, но не получалось :(
Попробую еще потестить.
Back to top
View user's profile Send private message
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Mon Mar 24, 2003 7:27 pm (спустя 1 час 32 минуты)
   Post subject:
Reply with quote

Похоже, у этой полумеры есть недостаток невозможность поставить cookie :( что офигенно грустно.
Заплатку собирал.
Но убого получилось.

Блин, правда говорят, жить захочешь не так раскорячишься....

Вариант tie/untie в таком виде не прокатывает.
Разбираться почему, откровенно, уже некогда.
Проект кое-как шевелится, пока меня большее не заботит. Может как высплюсь когда-нибудь...
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 24, 2003 7:49 pm (спустя 22 минуты)
   Post subject:
Reply with quote

Почему Cookie невозможно? Разве SetCookie из CGI::WebIn не работает?
Back to top
View user's profile Send private message Send e-mail
Виктор Ганский aka GunSky
Участник форума



Joined: 15 Mar 2003
Posts: 48
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Mon Mar 24, 2003 9:34 pm (спустя 1 час 45 минут)
   Post subject:
Reply with quote

Я переименовал модуль.
В нормальном комплекте этой проблемы, конечно, не будет.

Я кое-как залатал, не буду показывать как, а то стыдно :))

Может смогу еще выделить время что бы решить проблему основательно.
Back to top
View user's profile Send private message
Zergen
Заглянувший



Joined: 26 May 2003
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Wed Jul 09, 2003 2:15 pm (спустя 3 месяца 15 дней 16 часов 40 минут)
   Post subject:
Reply with quote

Вроде все отрихтовалось тремя строчками:

Комментируем:
Code (any language): скопировать код в буфер обмена
Добавляем вместо этой строки:
Code (any language): скопировать код в буфер обмена
open THE_REAL_STDOUT, ">&STDOUT"     or die "Can't dup STDOUT: $!";
open STDOUT, '>';
И все (вроде) работает...
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Aug 23, 2003 4:54 pm (спустя 1 месяц 14 дней 2 часа 38 минут)
   Post subject:
Reply with quote

Zergen wrote:
И все (вроде) работает...
Нельзя так делать. А что, если до этого другой модуль связал STDOUT со своим обработчиком? тогда после подключения CGI::WebOut тот обработчик уже не будет вызываться. Непорядок.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Aug 24, 2003 8:36 pm (спустя 1 день 3 часа 42 минуты)
   Post subject:
Reply with quote

Все исправил.
33_CGI::WebOut: новая жизнь старых модулей (forum.dklab.ru/comments/nablas/WeboutNovayaGiznStarihModuley.html)
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies. All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You cannot download files in this forum.
XML