Forum Webscript.Ru

Программирование => Perl => Тема начата: C++ от 11 Июня 2003, 11:38:15

Название: Ошибки. Help!!!
Отправлено: C++ от 11 Июня 2003, 11:38:15
1) Вот такой Warning вылазит на всех вызываемых функциях: main::proc(
) called too early to check prototype at C:\\cgi-bin\\script.pl line 43
, как от него избавиться и что это такое?
2) Can\'t use string ("") as a symbol ref while "strict refs" in use at C:\\cgi-bin\\script.pl line 1178, в этом месте стоит просто открытие файла, понять не могу в чем там дело, этой строки такой и близко нет. также эта ошибка вылазит и в других местах, тоже при открытии файла. Открываю все абсолютно нормально.
Название: Ошибки. Help!!!
Отправлено: C++ от 12 Июня 2003, 21:47:51
Неужели никто не знает???
И еще вопрос, у меня есть скрипт (очень большой), так вот, когда я его запускаю с ключем -w, то он виснет почему такое может быть (самые распространенные причины)?
Спасибо.
Название: Ошибки. Help!!!
Отправлено: NCRangeR от 12 Июня 2003, 23:06:43
C++
Было такое (насчет зависания большого скрипта), причин не знаю. :(
Причем вис, зараза, даже когда в самом начале ставил die "!!";

Насчет - посмотри, не забыл ли где кавычки закрыть, он эту штуку может расценивать как обращение к оператору < > (вроде такое один раз у меня было)...

Про Warning - пиши в начале скрипта прототип вызываемой функции.
sub roc();
Название: Ошибки. Help!!!
Отправлено: Mog. от 13 Июня 2003, 08:18:32
Цитировать
C++:
с ключем -w, то он виснет
Ага, я тоже сталкивался с этим. Причину так и не выяснил. Я так понял, что слишком много предупреждений вываливалось в логи. Если их было немного, скрипты не висли, независимо от длинны. Бороться можно отключая -w или устраняя причины предупреждений.
Название: Ошибки. Help!!!
Отправлено: C++ от 13 Июня 2003, 10:44:48
Вставил прототипы функций (в том же порядке как идут функции) в начале скрипта, варнинги ушли, но теперь появились ошибки типа:
Too many arguments for main::error at C:\\cgi-bin\\script.pl line , раньше ошибки подобного рода появлялись, но только в том случае если я из одной функции вызывал другую, которая описана по тексту выше или ниже (не помню уже), но смысл в том, что ошибка возникала из-за расположения в тексте одной функции относительно другой.
Вообще этот скрипт работал, я решил структурироваь текст, и вместо табуляций вставить пробелы, удалил все табуляции и отструктурировал, работать он перестал и стал жутко глючить:(
Что это может быть?
Название: Ошибки. Help!!!
Отправлено: Phoinix от 13 Июня 2003, 11:00:20
C++
Если скрипт работает на Unix-системах, то он очень чувствителен к кодировке в которой написан скрипт, некоторые программы редактирования скриптов, при его открытии, берут и конвертят его в другую кодировку или сохраняют в другой. У меня такое уже было, просто открыл файл, подредактировал и сохранил, у меня на локальном сервере под win2k все работало нормально, но когда залил на сервер под Linux скрипт, естественно, не заработал... :-(

P.S. Благо была резервная копия скрипта
Название: Ошибки. Help!!!
Отправлено: C++ от 13 Июня 2003, 11:05:46
Phoinix
С кодировкой точно все в порядке, я за этим слежу, да он и под виндой и под линуксом глючит:(
Название: Ошибки. Help!!!
Отправлено: ReDrum от 13 Июня 2003, 17:15:46
%s() called too early to check prototype

(W prototype) You\'ve called a function that has a prototype before the parser saw a definition or declaration for it, and Perl could not check that the call conforms to the prototype. You need to either add an early prototype declaration for the subroutine in question, or move the subroutine definition ahead of the call to get proper prototype checking. Alternatively, if you are certain that you\'re calling the function correctly, you may put an ampersand before the name to avoid the warning. See the perlsub manpage.
Название: Ошибки. Help!!!
Отправлено: C++ от 13 Июня 2003, 17:29:19
ReDrum
С прототипами я уже разобрался....
Теперь вот это мучает:
Too many arguments for main::error at C:\\cgi-bin\\script.pl line
:(
Название: Ошибки. Help!!!
Отправлено: ReDrum от 13 Июня 2003, 17:58:30
Too many arguments for %s

(F) The function requires fewer arguments than you specified. ;)=
Название: Ошибки. Help!!!
Отправлено: ReDrum от 13 Июня 2003, 18:01:21
In common way to resove problems place
use strict
read faq for more
Название: Ошибки. Help!!!
Отправлено: C++ от 13 Июня 2003, 22:10:26
Can\'t use string ("") as a symbol ref while "strict refs" in use at C:\\cgi-bin\\script.pl line 1178,
С этой ошибкой покончено!
Если кому интересно, то дело было в том, что в строку use CGI qw(all) случайно затесалось двлеточие, т.е. было так: use CGI qw(:all) .
Ошибка, в основном, выскакивала при открытии файлов.
А вот об этой ошибке Too many arguments for main::error at C:\\cgi-bin\\script.pl line
честно говоря ничего не понял, в английском не силен совсем:(
Название: Ошибки. Help!!!
Отправлено: КшЫуфксрук от 16 Июня 2003, 15:41:18
>> С прототипами я уже разобрался....

Сомневаюсь. Просто они теперь выдают другую ошибку. А зачем они вообще нужны, можешь пояснить?

>>> called too early to check prototype at C:\\cgi-bin\\script.pl line 43


А эту строку и строку, где объявлена эта функция, очень сложно было сюда скопировать?
Название: Ошибки. Help!!!
Отправлено: metton от 23 Августа 2003, 23:58:49
2C++
Цитировать
Если кому интересно, то дело было в том, что в строку use CGI qw(all) случайно затесалось двлеточие, т.е. было так: use CGI qw(:all)

Оно как раз-таки затесалось туда совсем не случайно. Если ты пишешь use CGI qw(all), то qw(all) не значит ровным счётом ничего. Ты пытаешься экспортировать функцию/свойство all, которого нет в модуле CGI.pm. Используя же use CGI qw(:all) ты получаешься экспортированный класс (может, это называется как-то по-другому?) функций/свойств :all.