我使用Linux :: SysInfo类来获取远程系统的一些信息,变量$ si(sysinfo)在返回时不是字符串格式,如何将其输出转换为字符串格式? / p>
package Hello;
use Linux::SysInfo qw/sysinfo/;
sub hello {
my $si = sysinfo;
return SOAP::Data->name('result')->type('string')->value($si);
}
1;
目前,我认为它会返回HASH值,如客户所说:
预期字符串值而不是HASH引用
答案 0 :(得分:4)
您对sysinfo有什么价值?例如,正常运行时间可由
返回return SOAP::Data->name('result')->type('string')->value($si->{uptime});
如果你真的想要所有的信息,那么Data :: Dumper可能是最好的方式。
对于多个返回值,您可以使用Data :: Dumper:
use Data::Dumper;
...
return SOAP::Data->name('result')->type('string')->value(Dumper $si);
或者您可以使用不同的名称在SOAP :: Data对象中存储多个值并将其返回。
答案 1 :(得分:0)
使用Data::Dumper或JSON以字符串形式提供数据。
package Hello;
use Linux::SysInfo qw/sysinfo/;
use JSON;
sub hello {
my $si = sysinfo;
my $j = new JSON;
return SOAP::Data->name('result')->type('string')->value($j->encode($si));
}
1;
答案 2 :(得分:0)
通过参数化很容易实现灵活性。
传递sub一个额外的参数来决定返回什么值:
sub hello {
my ( $wanted_param ) = @_;
my $si = sysinfo;
return SOAP::Data
->name( 'result' )
->type( 'string' )
->value( $si->{$wanted} );
}
say hello 'uptime'; # Returns uptime value
say hello 'totalram'; # Returms totalram value