Не может использовать неопределенное значение в качестве ссылки на символ - PullRequest
1 голос
/ 28 января 2012

Я пытаюсь использовать API для программного обеспечения Palo Alto Networks. Код должен передавать имя пользователя и IP-адрес сетевых имен пользователей в веб-интерфейсе.

Когда я пытаюсь использовать API-интерфейс PAN с их примером кода для машины с Windows, выдается следующее исключение:

Can't use an undefined value as a symbol reference at
C:/Perl/lib/PAN/API.pm line 179 (#1)

PAN::API::UID::login('PAN::API::UID=HASH(0x7fd113828598)', 'SCU-DSM22/pmmertens', 172.16.6.117) called at API_events.pl line 12

Это пример кода, который поставляется с документацией API:

#!/usr/bin/perl -w

use strict;
use PAN::API;

my     $useridagent    = '10.0.0.99'; #I changed this to our PAN server address

my     $useridapi      = PAN::API::UID->new($useridagent);

my     $user           = $ENV{USERDOMAIN}.'/'.$ENV{USERNAME};
my     $ipaddress      = unpack('W4',gethostbyname($ENV{COMPUTERNAME}));

    $useridapi->login($user,$ipaddress);

Я гарантирую, что все переменные получены правильно. Подстановка буквальных значений тоже не помогла. Погуглив эту ошибку, мы обнаружили ссылки на жесткие и мягкие ссылки, но я не вижу никаких нарушений этих правил в приведенном ниже коде.

Это кодовый блок из PAN / Api.pm. В строке 179 начинается печать.

sub submit () {
    my  $self               = shift;

    use IO::Socket::INET;
    use IO::Socket::SSL;

    my  $socket             = IO::Socket::INET->new(PeerAddr => $self->{server},
                                                PeerPort => $self->{port},
                                                Proto    => 'tcp');

    my  $socketssl          = IO::Socket::SSL->start_SSL(   $socket,
                                                    SSL_version     =>'TLSv1');
    print   $socketssl $self->xml;
            $socketssl->close;
            $socketssl->stop_SSL;
}

1 Ответ

4 голосов
/ 28 января 2012

Обе строки IO :: Socket :: INET и IO :: Socket :: SSL должны иметь проверку ошибок.Что-то вроде:

my $socket = IO::Socket::INET->new(....)
  or die "Failed to create socket: $!"

И:

my $socketssl = IO::Socket::SSL->start_SSL(...)
  or die "Failed to start SSL: ".IO::Socket::SSL::errstr();

Хотя вместо смерти я мог бы пойти с Carp :: confess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...