Forum Webscript.Ru
Программирование => Perl => Тема начата: 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.
это дословно. :)
неприятно в общем. хочется чтоб лог чистеньким был.
смотрела, смотрела я на это безобразие, да так ничего и непоняла.
-
AnnA
ищи sub head в своей программе, переименуй ее или используй пример который указан в ошибке.
-
нету у меня такого саба. :( у меня их там всего навсего три штуки, так что долго и искать не пришлось. Вот незадачка, правда ? Я и не лазила в этот 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;
Разницы же никакой, или я ошибаюсь?
-
AnnA
Может имеет смысл не выгружать методы из CGI?
и писать, например, не:
use CGI qw(:standard);
print header;
а...
use CGI;
my $cgi = new CGI;
print $cgi->header;
???
-
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";}
ну то есть это я к тому, что много переписывать придётся. :)
-
AnnA
это ведь больше писанины...
Зато IMHO более понятно, что за метод (процедуру) ты запускаешь (из какого модуля)
ну то есть это я к тому, что много переписывать придётся
Top menu -> Edit -> Replace...
;)
-
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).
один в один мой случай. :):):)