LINUX.ORG.RU

perl: Cannot replace non-existent sub (main::shell)


0

0

Вот такая проблемка...
my $override = Sub::Override->new(shell => sub {
#$override->replace (shell => sub {
    my $ssh = shift;
    my $cmgr = $ssh->channel_mgr;
    my $channel = $ssh->_session_channel;
    $channel->open;
    $channel->register_handler(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, sub {
        my($channel, $packet) = @_;
        my $r_packet = $channel->request_start('pty-req', 0);
        my($term) = $ENV{TERM} =~ /(\w+)/;
        $r_packet->put_str($term);
        $r_packet->put_int32(0) for 1..4;
        $r_packet->put_str("");
        $r_packet->send;
        $channel->{ssh}->debug("Requesting shell.");
        $channel->request("shell", 0);
    }); # <<-- 45 строка
$override->replace;

В  Net::SSH::Perl (БСд) и  Net::SSH::W32Perl ( венда)  говорит ошибок нет, но ломается  на 45 строке.

# perl -c tst_5
tst_5 syntax OK
# perl tst_5
Cannot replace non-existent sub (main::shell) at tst_5 line 45
anonymous

> Cannot replace non-existent sub (main::shell) at tst_5 line 45

Какая именно буква непонятна?

anonymous
()
Ответ на: комментарий от anonymous

Найти модуль в котором эта shell определена, там её и заменять по имени 'ИмяМодуля::shell'.

Если же интересует shell именно в основном модуле, то её нужно просто определить.

anonymous
()
Ответ на: комментарий от anonymous

Это решил, сейчас вот что...
Can't call method "channel_mgr" without a package or object reference at D:\cygwin\ro2.pl line 228, <COMMAND> line 1.
у меня...
Net::SSH::Perl::ChannelMgr менял на Net::SSH::W32Perl::ChannelMgr
не прошло=(

sub channel_mgr {
    my $ssh = shift;
    unless (defined $ssh->{channel_mgr}) {
        $ssh->{channel_mgr} = Net::SSH::Perl::ChannelMgr->new($ssh);
    }
    $ssh->{channel_mgr};
}
sub ssh {
....etc...
my $cmgr = $ssh->channel_mgr;
    	my $channel = $ssh->_session_channel
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.