如何在Perl中将此变量转换为字符串

时间:2011-12-21 10:44:08

标签: perl

我使用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引用

3 个答案:

答案 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::DumperJSON以字符串形式提供数据。

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