Perl,Net :: Traceroute :: PurePerl返回值

时间:2011-11-15 01:45:08

标签: perl soap

这是我从CPAN复制的子例程。当我从命令行运行它时,它工作正常。我有一个类似于Net :: Traceroute的函数也可以正常工作,并允许我通过SOAP调用返回字符串。当我尝试使用SOAP调用从下面的函数返回〜字符串(?)时出现问题。

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 :: Traceroute :: PurePerl有什么不同,它不允许我用SOAP返回值,因为Net :: Traceroute版本允许我用SOAP返回它。

修改 为了调试,我只是编辑了最后一行:

   #$t->traceroute; 

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

请注意,这会在SOAP调用中返回“test”。但是,如果我取消注释$t->traceroute;,则SOAP调用会中断。客户端通过SOAP调用得不到任何回报。

2 个答案:

答案 0 :(得分:2)

每当你看到类似" HASH(0x11fa6bf0)"的东西时,尝试使用Data :: Dumper来显示它是什么。

(假设你的hashref在$ t中)

使用Data :: Dumper; 打印翻斗车$ t;

(Data :: Printer会让你更加有用地了解你的参考内容,特别是如果你的内部有代码,但Data :: Dumper的优势在于它&# 39;很长一段时间都在Perl核心中,所以你总是让它可用......)

答案 1 :(得分:0)

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

之后