Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Есть ли в Perl работа с байтовыми массивами? / 4 сообщений из 4, страница 1 из 1
13.01.2015, 18:28
    #38853537
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в Perl работа с байтовыми массивами?
Нужно работать по SSH с сетевым оборудованием.
Пока что единственным работоспособным вариантом оказался Net::SSH2.
Net::OpenSSH не позволяет отправлять несколько команд в одном сеансе, хотя его API удобнее.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
use vars qw($ssh_channel);
use Net::SSH2;
...
my $ssh = Net::SSH2->new();
$ssh->connect('host') or die "!Connect: $@";
$ssh->auth_password('user','password') or die "!Auth: $@";
my $ssh_channel = $ssh->channel();
$ssh_channel->blocking(0);
$ssh_channel->shell();
...
my $ver = &sshcmd('show version');
print "Version: $ver\n";
...
sub sshcmd
{
        my $cmd = shift;
        my $extra = shift;
        my ($data, $buf, $len) = ('', '', 0);
        $ssh_channel->write($cmd."\r");
        $ssh_channel->flush();
        select(undef,undef,undef,0.2);
        while ($len = $ssh_channel->read($buf, 512))
        {
                $data .= $buf;
        }
        my @res = split("\r\n", $data);
        shift @res;
        pop @res;
        return (wantarray ? @res : join("",@res) ) unless ($extra);
        return $res[0] if ($extra eq 'first');
        return $res[$#res] if ($extra eq 'last');
}


Но использовать строковую переменную в качестве буфера мне кажется не очень правильным.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
14.01.2015, 01:34
    #38853720
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в Perl работа с байтовыми массивами?
Когда кажется - креститься надо. Нормально все - используйте.
...
Рейтинг: 0 / 0
14.01.2015, 09:16
    #38853790
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в Perl работа с байтовыми массивами?
WarstoneНормально все - используйте.
Я с Perl знаком не очень хорошо.
Например на VB такой алгоритм был бы не самым лучшим, т.к. строка data = data & buf означает, что при каждой итерации будет создаваться новый строковой буфер (на каждой итерации будет задействована память под data и под data+buf) и назначаться переменной, т.е. получится алгоритм Шлемиля. Там более правильным было бы создать массив или строку определенного размера (удваивая его при необходимости и обрезая до нужного значения по выходу из цикла) и вносить в эту строку текущий буфер (для строки будет что-то вроде Mid(data, offset, Len(buf)) = buf).
В Perl это актуально или там управление памятью недоступно для пользователя?
...
Рейтинг: 0 / 0
22.01.2015, 04:36
    #38860237
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли в Perl работа с байтовыми массивами?
курите pack unpack
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Есть ли в Perl работа с байтовыми массивами? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]