Страница 1 из 1

perl по учебе, помощь по доке

Добавлено: 2012-05-22 11:33:34
Spook1680
Добрый день
подскажите плиз
в докум. perl для знатока это примитв будет.

Net::Ping - check a remote host for reachability
там есть хороший пример

Код: Выделить всё

$p = Net::Ping->new("icmp");
$p->bind($my_addr); # Specify source interface of pings
foreach $host (@host_array)
{
print "$host is ";
print "NOT " unless $p->ping($host, 2);
print "reachable.\n";
sleep(1);
}
$p->close();
пытаюсь прикрутить if else но не выходит.

задача к примеру если google.ru не пингуется
то должно выполниться
`cp test1 test`
если пингуеться то ничего не происходит.

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 11:38:38
ChihPih
А как пытаетесь прикрутить?

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 11:47:36
Spook1680
ChihPih писал(а):А как пытаетесь прикрутить?

Код: Выделить всё

#!/usr/bin/perl -w
use Net::Ping;
$host = '192.168.0.59';
$my_addr = '192.168.0.59';
@host_array = 'google.ru';
$vtor = `cp /test1 /test`;

$p = Net::Ping->new("icmp");
$p->bind($my_addr); # Specify source interface of pings
foreach $host (@host_array)
{
print "$host is ";
$vtor unless $p->ping($host, 2);
print "reachable.\n";
sleep(1);
}
$p->close();


Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 12:21:47
ChihPih
Еще бы, для задания переменной вы используете апострофы (которые используется для выполнения системных команд и получения от них результата), когда надо вывести строку. То есть вам надо использовать одинарные или двойные кавычки для инициализации переменной $vtor.

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 12:43:51
Spook1680
ChihPih писал(а):Еще бы, для задания переменной вы используете апострофы (которые используется для выполнения системных команд и получения от них результата), когда надо вывести строку. То есть вам надо использовать одинарные или двойные кавычки для инициализации переменной $vtor.
ок.
ну тут простенько но работает теперь.

Код: Выделить всё

#!/usr/bin/perl -w
use Net::Ping;
$host = '192.168.0.63';
$my_addr = '192.168.0.63';
@host_array = 'google.ru';

$p = Net::Ping->new("icmp");
$p->bind($my_addr); # Specify source interface of pings
foreach $host (@host_array)
{
print `cp /test1 /test ` unless $p->ping($host, 2);
sleep(1);
}
$p->close();
~             

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 13:11:24
snorlov
$host зачем инициализировали, это ж элемент из массива $host_array

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-22 13:23:51
Spook1680
snorlov писал(а):$host зачем инициализировали, это ж элемент из массива $host_array
ок.
т.е foreach в переменную $host не копируется элемент массива $host_array
Переменная $host в теле цикла — это и есть сам элемент массива.
ОК. Спасибо, я не правильно понимал принцип работы.

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-24 10:00:16
Spook1680
snorlov писал(а):$host зачем инициализировали, это ж элемент из массива $host_array
Добрый день!
snorlov вы не подскажите!
Продолжаю изучение и не пойму, цикл until
как его прикрутить! Типа пинг хоста продолжаеться, пока нет ответа. Как только получили ответ, until прикращает действие

К примеру кусок из доки.
понимаю его так, подключили модуль use Net::Ping;
присвоем его скаляру $p
$p пингует хост (pupsik.ru)
если ping удался то выводит сообщение $host is alive

Код: Выделить всё

use Net::Ping;
$p = Net::Ping->new();
print "$host is alive.\n" if $p->ping($host);
$p->close();
К примеру, мне не понятно, как можно запихнуть - информацию о том что ping есть, пихать его в массив и сравнивать.

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-24 10:55:10
ChihPih
Продолжаю изучение и не пойму, цикл until
как его прикрутить! Типа пинг хоста продолжаеться, пока нет ответа. Как только получили ответ, until прикращает действие
Оператор until робит до тех пор пока результат проверяемого выражение равен 0 (false). То есть в самом простом случае, код может выглядеть так:

Код: Выделить всё

use Net::Ping;
$p = Net::Ping->new();
until ($p->ping($host)){
  print "Host is down\n";
}
print "$host is alive.\n";
$p->close();
К примеру, мне не понятно, как можно запихнуть - информацию о том что ping есть, пихать его в массив и сравнивать.
Не совсем понятно что для чего нужно и зачем?

Re: perl по учебе, помощь по доке

Добавлено: 2012-05-24 11:42:57
Spook1680
К примеру, мне не понятно, как можно запихнуть - информацию о том что ping есть, пихать его в массив и сравнивать.
Не совсем понятно что для чего нужно и зачем?
[/quote]

until цикл как раз и хотел прикрутить. пока пинга нет, цикл работает и будет пинговать хост - пока не получит от него ответа.
Как только пинг пошел (типа комп. включили пинг есть). цикл until перестал выполняться, выполняеться команда `cp /test2 /test`