2011-11-15 61 views
0

這是從CPAN複製的子例程。它在我從命令行運行時正常工作。我有一個類似於Net :: Traceroute的函數,它也可以正常工作,並允許我用SOAP調用返回字符串。當我嘗試使用SOAP調用從下面的函數返回〜字符串(?)時,問題就出現了。Perl,Net :: Traceroute :: PurePerl返回值

sub tr { 
    use Net::Traceroute::PurePerl; 
    my $t = new Net::Traceroute::PurePerl(
     backend  => 'PurePerl', # this optional 
     host   => 'www.whatever.com', 
     debug   => 0, 
     max_ttl  => 30, 
     query_timeout => 2, 
     packetlen  => 40, 
     protocol  => 'udp', # Or icmp 
    ); 
    $t->traceroute; 

    return $t; 
} 

輸出類似於除了字符串的最後部分的字符串看起來是這樣的:

28 * * * 
29 * * * 
30 * * * 
Net::Traceroute::PurePerl=HASH(0x11fa6bf0) 

我不知道什麼是有關Net ::路由跟蹤:: PurePerl贏得」不同允許我使用SOAP返回值,因爲Net :: Traceroute版本允許我使用SOAP返回值。

編輯: 要調試,我只是編輯的最後幾行是這樣的:

#$t->traceroute; 

    #return $t; 
    $foo = "test"; 
    return $foo; 

注意它返回 「測試」 throught SOAP調用。但是,如果我取消註釋$t->traceroute;,那麼SOAP調用中斷將返回。客戶端無法通過SOAP調用返回。

+0

'pretty_print'方法將跟蹤轉儲到標準輸出,您的'返回$ t'返回一個正在被串化的祝福哈希。你是否想要返回'pretty_print'輸出? –

+0

pretty_print從服務器版本中刪除。我剛剛編輯了問題以反映當前版本。同樣的問題仍然存在。 –

+0

但是你試圖返回跟蹤字符串或整個對象? –

回答

2

任何時候當您看到類似「HASH(0x11fa6bf0)」的東西時,請嘗試使用Data :: Dumper向您顯示它是什麼。

(假設您的hashref爲$ t)

use Data :: Dumper; print Dumper $ t; (Data :: Printer會給你一個更有用的看看你的引用裏面有什麼,特別是如果你有它的coderefs,但Data :: Dumper的優點是它已經在Perl核心長時間,所以你應該總是有它可用...)

0

添加$ t-> pretty_print;在$ t-> traceroute之後;