2012-01-27 58 views
1

我正在嘗試使用Palo Alto Networks軟件的API。該代碼應該提交用戶網絡登錄的用戶名和IP地址到Web界面。不能使用未定義的值作爲符號引用

當我嘗試使用的PAN API與他們的示例代碼在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

就在'print'語句之前,添加'die'\ $ socketssl未定義「除非定義$ socketssl;'並且看它是否在那裏死亡。 – 2012-01-27 21:28:59

+0

發生完全相同的錯誤。有什麼方法可以確保建立到服務器的SSL連接?它甚至給我這個錯誤,如果我把錯誤的服務器IP – 2012-01-27 21:32:56

+0

在這種情況下,還添加'die「xml方法未定義」除非定義$ self-> xml;' – 2012-01-27 21:36:01

回答

4

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(); 

雖然不是模具的我可能會與鯉魚::懺悔去。

+1

+1供'confess'。 '鯉魚'不是垃圾! :d – 2012-01-28 00:59:06

相關問題