| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Ошибка при подключении модуля Time |
| Автор: vechik 15.2.2010, 09:49 | ||
Есть такой код
... Если убираю комментарий из последней строки, то в логах получаю такую запись: Premature end of script headers. Подозреваю, то на сервере используется версия Perl 5.8.8, а эти функции включены начиная с версии 5.10.1. Может, кто посоветует, что делать? А задача - подсчитать интервал времени в мс выполнения блока программы. |
| Автор: sir_nuf_nuf 15.2.2010, 10:08 |
| Обычно это бывает когда переводы строки после заголовков HTTP забыли вывести. Покажите весь скрипт |
| Автор: arto 15.2.2010, 10:23 |
| а он у вас есть, Time::HiRes ? |
| Автор: mvsgt 15.2.2010, 12:56 |
| Обычно такие ошибки исправляются, имитируя вызов скрипта сервером. Сделайте это, и узнаете что происходит. Конечно, можно и потелепатировать. |
| Автор: DurRandir 15.2.2010, 13:14 |
| >>> use strict; perldoc strict Это очень полезная прагма, прочитайте, что она НЕ даёт вам делать, и что из этого вы делаете в скрипте. |
| Автор: vechik 15.2.2010, 13:33 | ||
Вот так получилось, но выдает секунды ... my $result = eval{use Time::HiRes; my $t1=time;}; print "$result ------ $@"; ... А так ... my $result = eval{use Time::HiRes; my ($s,$mks)=gettimeofday();}; print "$result ------ $@"; ... выдало ------ Undefined subroutine &main::gettimeofday called at _index1.pl line 12. |
| Автор: mvsgt 15.2.2010, 14:39 |
| vechik, Вам уже намекали насчёт use strict. #$t1=time; есть, а my $t1; нет. И Вы упорно не хотите выполнить скрипт без браузера и апача, просто из командной строки? |
| Автор: vechik 16.2.2010, 12:56 | ||
| Ошибку нашел. Функцию надо писать со всеми префиксами. А также отдельно объявить переменные для дальнейшего использования. Вот правильный вариант: ...
... Совершенно непонятно, зачем нужны strict, warnings, diagnostics и даже eval, если почти всегда идет ошибка 500. Как выводить все ошибки в браузер??? |
| Автор: JackYF 16.2.2010, 13:27 | ||
|
| Автор: mvsgt 16.2.2010, 13:29 |
| vechik, надо хотя бы чуть-чуть перл подучить, а? Ну зачем Вы используете $result = eval{($s,$mks)=Time::HiRes::gettimeofday();}; ? Time::HiRes используется для вычисления точного времени, а eval замедляет его получение. зачем strict - затем, чтобы в браузер шла ошибка 500, без strict ошибок будет меньше, но программа может начать работать неправильно. Функцию можно писать с префиксами, можно без. В документации всё описано. Но с префиксами может и лучше. Чтобы видеть ошибки, запускайте свои скрипты без браузера. Зачем Вы в браузер суёте неотлаженные скрипты? Во всяком случае в error_log должны быть сообщения об ошибках, которые не видны в браузере. Если компиляция скрипта не проходит, то fatalsToBrowser не проходит. Кстати, этот тэг есть в CGI. |
| Автор: RomanCh 16.2.2010, 23:16 | ||
| Почему-то мне кажется что кто-то пытается заниматься чем-то стоя в гамаке... Может конечно я сыграю в капитана, но по-моему проблема решается "очень сложно", примерно вот так:
В cgi окружение надеюсь автор сам сможет впихнуть Добавлено через 2 минуты и 42 секунды PS топикстартер, попробуйте использовать команду man Time::HiRes или хотя бы посмотрите http://search.cpan.org/~jhi/Time-HiRes-1.9720/HiRes.pm. |