Forum Webscript.Ru

Программирование => Perl => Тема начата: AnnA от 20 Октября 2004, 13:35:52

Название: ошибка в error.log
Отправлено: AnnA от 20 Октября 2004, 13:35:52
Всем привет! :)
Подскажите пожалуйста, чего он мне пытается рассказать?
Всё работает "как надо", но в логах вижу такое вот:
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7] Subroutine head redefined at d:/usr/lib/CGI.pm line 231 (#1)
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]     (W redefine) You redefined a subroutine.  To suppress this warning, say
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]    
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]         {
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]     no warnings;
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]     eval "sub name { ... }";
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]         }
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]    
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7] Prototype mismatch: sub main::head ($) vs none at d:/usr/lib/CGI.pm line 231 (#2)
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]     (S unsafe) The subroutine being declared or defined had previously been
[Mon Oct 18 16:13:47 2004] [error] [client 127.0.0.7]     declared or defined with a different function prototype.

это дословно. :)
неприятно в общем. хочется чтоб лог чистеньким был.
смотрела, смотрела я на это безобразие, да так ничего и непоняла.
Название: ошибка в error.log
Отправлено: NeoNox от 20 Октября 2004, 14:04:40
AnnA
ищи sub head в своей программе, переименуй ее или используй пример который указан в ошибке.
Название: ошибка в error.log
Отправлено: AnnA от 20 Октября 2004, 14:27:11
нету у меня такого саба. :( у меня их там всего навсего три штуки, так что долго и искать не пришлось. Вот незадачка, правда ? Я и не лазила в этот d:/usr/lib/CGI.pm чтоб там чего-то переопределять...
no warnings не хочу использовать.
строку use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
заменила на use CGI::Carp qw(fatalsToBrowser);
теперь лог даёт: Prototype mismatch: sub main::head vs ($) line 13
line 13: use LWP::Simple;
Скажите, а разве имеет значение порядок перечисление загружаемых модулей? Ну, то есть, есть разница написала я так:
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use CGI::FastTemplate;
use CGI::Fast;
use HTML::TokeParser;
use LWP::Simple;
use Fcntl qw(:flock);

use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");...

или... или, например, вот так:use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");
use HTML::TokeParser;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use strict;
use CGI qw(:standard);
use LWP::Simple;
use CGI::FastTemplate;
use Fcntl qw(:flock);
use CGI::Fast;
Разницы же никакой, или я ошибаюсь?
Название: ошибка в error.log
Отправлено: Phoinix от 20 Октября 2004, 14:35:24
AnnA
Может имеет смысл не выгружать методы из CGI?

и писать, например, не:

use CGI qw(:standard);
print header;

а...

use CGI;
my $cgi = new CGI;
print $cgi->header;

???
Название: ошибка в error.log
Отправлено: AnnA от 20 Октября 2004, 14:46:31
Phoinix я распечатала скрипт, на самом деле там проблема с LWP::Simple; перемудрила где-то, сейчас буду разбираться. :) Пасиба.
Цитировать
Phoinix:
не выгружать методы из CGI

это ведь больше писанины. :)
в скрипте несколько форм и от одной к другой есть переходы параметров, например:
my @names = $q->param;
my %OLD_PARAM=();
foreach (@names) { $OLD_PARAM{$_}=$q->param($_); }

while (my ($k,$v) = each(%OLD_PARAM)) {print $q->hidden($k,$v),"\\n";}
ну то есть это я к тому, что много переписывать придётся. :)
Название: ошибка в error.log
Отправлено: Phoinix от 20 Октября 2004, 15:00:56
AnnA
Цитировать
это ведь больше писанины...


Зато IMHO более понятно, что за метод (процедуру) ты запускаешь (из какого модуля)

Цитировать
ну то есть это я к тому, что много переписывать придётся


Top menu -> Edit -> Replace...

;)
Название: ошибка в error.log
Отправлено: AnnA от 20 Октября 2004, 15:11:49
Цитировать
Phoinix: IMHO
:)

а по вопросу вот чего нашла:
Цитировать
CAVEAT
Note that if you are using both LWP::Simple and the very popular CGI.pm module, you may be importing a head function from each module, producing a warning like ``Prototype mismatch: sub main::head ($) vs none\'\'. Get around this problem by just not importing LWP::Simple\'s head function, like so:

        use LWP::Simple qw(!head);
        use CGI qw(:standard);  # then only CGI.pm defines a head()
Then if you do need LWP::Simple\'s head function, you can just call it as LWP::Simple::head($url).

один в один мой случай. :):):)