Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2010, 05:00   #1
Nexta_s
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 15
По умолчанию Применение шаблона к элементам массива или нестандартная варка Perlовки

Имеется оборудование, к которому можно подключиться только по протоколу telnet и только одно соединение, оборудование понимает ограниченное количество команд (6),
необходимо скопировать с оборудования файлы с определенным расширением и проверить как скопировалось.
Из языков только Perl.
вот что есть на данный момент:
Код:
#!usr/bin/perl 
use strict;  
use Net::Telnet;
$t = net::telnet->new( Timeout =>30,
# сколько времени ждать чуда
                       Prompt => '/%/',
# какой командный интерпритатор вызовется для приятия данных
                       Host => $host,
 #Куда собрались цепляться IP, Порт
                       Port =>23,
                       Telnetmode=>0,
                       Errormode => "die",
                      Input_log=>"input.log",
                      Dump_log=>"dump_ats.txt");
$t->open ($host);
$t->break;
#break обязателен  - из-за кривости телента  без брейка не работает 
$t->login($username, $password);
$t->waitfor('/\>/');
@files = $t->cmd("ls -a -l");
print  @files;
#вот здесь я и запуталась
while (@files) 
{if  $file (@ files)=/\.bak$/i 

{$file=$t->cmd("put $file tftp://address/dir/");}}
в поисковики можете не посылать - перекопано все включая CPAN
Nexta_s вне форума Ответить с цитированием
Старый 18.08.2010, 18:00   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
{$file=$t->cmd("put $file tftp://address/dir/");}}
Оборудование понимает команду poot? Если да,то просто проверьте $file. Если он будет равен единицы то команда выполнилась успешно.
Или у тебя с регулярным выражением проблема ?
Да и while у тебя не правильный.
Попробуй так :
Код:
foreach my $l (@files){
if ($l=/\.bak$/i ){
print $l;
print my $k=$t->cmd("put $l tftp://address/dir/");
}
}

Последний раз редактировалось ssdm; 18.08.2010 в 18:10.
ssdm вне форума Ответить с цитированием
Старый 19.08.2010, 01:56   #3
Nexta_s
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 15
По умолчанию

Да оборудование понимает данную команду .
спасибо вам большое за помощь
Nexta_s вне форума Ответить с цитированием
Старый 19.08.2010, 11:39   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

ну так что? все заработало ?
ssdm вне форума Ответить с цитированием
Старый 24.08.2010, 03:34   #5
Nexta_s
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 15
По умолчанию

Заработало.
Накрутила где-то дальше.
my $date_copy= cmd("localtime(time)");
#выясняем текущее время
#нет работает следующая команда:
my $renamed_file=$t->cmd("mv billing.bin biling$date_copy.bak");
# переименовываем текущий основной файл отчета
my $new_file= cmd ("touch billing.bin");
#создаем пустой файл с заранее заданным именем
my $transfer_file=$t->cmd("tftp get $new_file billing.bin");
# загружаем файл
Nexta_s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
Нестандартная сортировка массива. MafoR Общие вопросы C/C++ 8 24.04.2010 17:41
обращение к элементам массива в С++ с помощью указателей серг Помощь студентам 0 05.12.2009 22:58
обращение к элементам двумерного массива на С++ серг Помощь студентам 16 05.12.2009 21:01