这是我从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调用得不到任何回报。
答案 0 :(得分:2)
每当你看到类似" HASH(0x11fa6bf0)"的东西时,尝试使用Data :: Dumper来显示它是什么。
(假设你的hashref在$ t中)
使用Data :: Dumper; 打印翻斗车$ t;
(Data :: Printer会让你更加有用地了解你的参考内容,特别是如果你的内部有代码,但Data :: Dumper的优势在于它&# 39;很长一段时间都在Perl核心中,所以你总是让它可用......)
答案 1 :(得分:0)
添加$ t-> pretty_print;在$ t-> traceroute;
之后