![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Вот такой вопросик, есть код:
так вот при $host='реально существующий хост' функция возвращает 0, в обратном случае тоже самое. И второй вопрос: при ответе пингуемого хоста время пинга $ping_time имеет очень жуткие значения, т.е. в 3-5 раз больше чем при пинге системной командой. Помогите плиз, люди добрые, может где-то ошибочка или недоглядел чего. Это сообщение отредактировал(а) StealtH - 23.9.2004, 22:25 |
|||
|
||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Попробуй такой вариант:
Обрати внимание на то, что в Perl в подпрограмме, в круглых скобках можно указать прототип. Тогда строка в которой создаётся подпрограмма, в нашем случает это pingNet, можно записать таким образом:
Заметь что нельзя указывать в круглых скобках переменную которая получает параметр переданный подпрограмме, в нашем случае это переменная $host. В круглых скобках можно указать только прототип. В противном случае, круглые скобки вообще не нужно указывать. Все параметры которые ты передаёшь в подпрограмму можно получить в теле самой подпрограммы, обратившись к массиву @_.
Системная комманда будет работать быстрее, так как много времени уходит на запуск внешнего интерпитатора, подключения модулей, компиляцию в промежуточный байт код и т.д. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Спасибо, попробую
А как в таком случае приблизить данные к реальным, т.е. как вычислить время за которое компилится программа и соответственно из полученного пингтайма вычесть это время |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Попробуй модуль Benchmark или функцию times(). Если хочешь добиться максимальной быстроты, то просто скомпиль файл в .exe . Эксешник работает быстрее, но постарайся перед компиляцией максимально оптимизировать код, подключай по возможности как можно меньше модулей. Потому как, при компиляции Perl файла, в него компилица не только твоя програ с расширением .pl, но и сам инетрпритатор, а так же все подключаемые модули. От того файл .exe быстро набирает вес, что не есть гуд. Желательно компилить большие проекты, почему объснять не буду, так как выше уже изложил, что происходит при компиляции. Короче не стоит создавать .exe из проги "Hello, world!", так как к двум строкам кода:
Добавится вес интерпритатора, естественно не всего, а только необходимых его частей. Это делается для того, что бы такой эксешник можно было запускать на машине, на которой не установлен интерпритатор Perl. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Так в том-то все и дело, что прога работает под линухом, в экзешник его не запихнешь. У меня по этому поводу вознила идея: а не лучше ли будет пинговать системной командой, и вывод с нее перехватывать перловой прогой. Если есть вариант подскажи как, или подкинь ссылку на "человеческую" литературу, как это все проще сделать. |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Для вызова системной команды, юзай system(), но учти, что она просто выполнит системную команду но сохранить в переменной результат её выполнения, для дальнейшей обработки, у тебя не получится:
Если команда что-то возвращает и у тебя есть желание сохранить это в переменную или массив, тогда обратные кавычки, то что нужно. Пример:
По возможности старайся юзать system(), так как она более безопасна. Удачи. Это сообщение отредактировал(а) korob2001 - 29.9.2004, 00:06 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Громадное спасибо, эти куски кода помогли сразу решить траблу не только с пингом, но и с многим другим, как только доделаю прогру обязательно поделюсь
Начал юзать вспомнил еще один ньюанс: как запустить несколько процессов из скрипта, не дожидаясь пока процесс что-то возвратит Это сообщение отредактировал(а) StealtH - 30.9.2004, 02:15 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Посмотри доки по хешу %SIG. Помоему с его помощью управляют процессами. Ещё тебе может понадобиться функция fork().
perldoc -f fork -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |