Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> анти-ошибка, и время выполнения скрипта 
:(
    Опции темы
xXvladXx
Дата 3.5.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бездарь
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 9.3.2008

Репутация: нет
Всего: 1



1)
есть функция
Цитата

sub get{
my $host = "host";
my $port = "80";
my ($path,$cookie,$type,$post)=@_;
my $socket = IO::Socket::INET->new("$host:$port");
unless ($socket) {die "can't connect to HTTP server on $host:$port: $!"} # вот тут гадина вылетает если die заменяю на
                                                                         #принт то вылетает
$socket->autoflush(1);                                                  #вот тут

my $header="$type $path HTTP/1.0\r\n".
    "Accept: */*\r\n".
    "Accept-Language: ru\r\n".
    "Content-Type: application/x-www-form-urlencoded\r\n".
    "Proxy-Connection: Keep-Alive\r\n".
    "Host: vkontakte.ru\r\n";
if($post){
$header.="Content-Length: ".length($post)."\r\n";
}
$header.="$cookie\r\n".
  "$post".
  "\r\n";
print $socket  "$header";
my @rz = <$socket>;
close $socket;
return join("\n",@rz);
}

как сделать что при ошибки он ждал 1 сек и начинал эту функцию с начала
2)
как засечь время выполнения скрипта 
секундомер, и наручные часы не катят:(

Это сообщение отредактировал(а) xXvladXx - 3.5.2008, 16:45
PM MAIL   Вверх
ramus
Дата 3.5.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



1) Обычно пишут так

Код

my $socket = IO::Socket::INET->new("$host:$port") 
  or die "can't connect to HTTP server on $host:$port: $!"} 


если ругается и вылетает, значит не смог соединиться. Надо смотреть что с сервером...

Чтобы ждал и не вылетал надо написать что то типа этого (я не проверял):
Код

use strict;
use IO::Socket;

my $host = "www.ru";
my $port = "80";

my $socket;
while ( ! ($socket = IO::Socket::INET->new("$host:$port") ) ) {
  # если попали сюда, значит не соединились
  print ("Not connected: $!\nSleep 5 sec\n");
  sleep 5;
}


а вообще по этому поводу есть ОЧЕНЬ хорошая книжка "Разработка сетевых программ на Perl" Линкольн Д. Штайн


2) ну тут совсем просто
Код

my ($t1,$t2);
# Запоминаем время начала работы
$t1=time;

#тут что то делаем, например спим
sleep 5;

# Запоминаем время окончания работы
$t2=time;

printf "Время работы %d sec", $t2-$t1;

PM MAIL   Вверх
FooBar
Дата 3.5.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: 1
Всего: 3



xXvladXx, 
а чем вам LWP::UserAgent не нравится?
PM MAIL   Вверх
xXvladXx
Дата 3.5.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бездарь
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 9.3.2008

Репутация: нет
Всего: 1



я там с куками не разобрался и сразу пакет составлять легче)
и сокеты быстрей)
PM MAIL   Вверх
xXvladXx
Дата 3.5.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бездарь
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 9.3.2008

Репутация: нет
Всего: 1



и еще вопрос как сделать задержку на 0,2сек???
PM MAIL   Вверх
ramus
Дата 3.5.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



Цитата

и еще вопрос как сделать задержку на 0,2сек??? 


Код

use Time::HiRes qw(sleep);

printf " %02d:%02d:%02d\n", sub{($_[2],$_[1], $_[0])}->(localtime);

sleep(0.2);
sleep(0.2);
sleep(0.2);
sleep(0.2);
sleep(0.2);

printf " %02d:%02d:%02d  5 x 0.2 = 1 sec\n", sub{($_[2],$_[1], $_[0])}->(localtime);


PM MAIL   Вверх
FooBar
Дата 3.5.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: 1
Всего: 3



select(undef, undef, undef, 0.2);  sleep понимает только целые значения
PM MAIL   Вверх
ramus
Дата 3.5.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



Цитата

sleep понимает только целые значения 


стандартный sleep действительно не понимает
sleep из стандартного модуля Time::HiRes понимает вещественные значения.
строка 
Код

use Time::HiRes qw(sleep)

говорит заменить стандартный на sleep из модуля

Кстати некоторые системы (я не встречал, но в книжках написано) не поддерживают select с 4 аргументами

PM MAIL   Вверх
FooBar
Дата 3.5.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: 1
Всего: 3



ramus, 
извиняюсь, не обратил внимание что вы экспортировали sleep из модуля
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.