关于 hash的问题。

关于 hash的问题。

use XML::RPC;
my $xmlrpc = XML::RPC->new('http://betty.userland.com/RPC2');
my @params = { state1 => 10, state2 => 28, state3=>10 };
my $result = $xmlrpc->call( 'examples.getStateStruct', @params );

上面的程序是XML::RPC的例子程序,能够运行,而且能够取回正确的结果。

但是有个问题,一直比较奇怪 ,这个 @params 是什么类型的数据?
我通过一些方法都不能得到里面的数值。
如何能够遍历 @params里面的键值对??


[Copy to clipboard] [ - ]
CODE:
use Data::Dumper;
print Dumper(@params);

所以我经常说CU的很多人缺少解决问题的思路。
看我的注释掉的代码应该就明白了。
本来我也是不知道的,但是我这么做之后,就知道了。

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

#my @params = ( { state1 => 10, state2 => 28, state3=>10 }, { a=>10 } );

#print Dumper(@params);

my @params = { state1 => 10, state2 => 28, state3=>10 };

foreach my $tmp( @params )
{
        my %tmp_hash = %{ $tmp };
        foreach my $key( keys %tmp_hash )
        {
                print $key."=>".$tmp_hash{$key}."\n";
        }
}

补充一下。
LZ的这个代码写得不规范,所以有这样的疑惑。


[Copy to clipboard] [ - ]
CODE:
use XML::RPC;

    my $xmlrpc = XML::RPC->new('http://betty.userland.com/RPC2');
    my $result = $xmlrpc->call( 'examples.getStateStruct', { state1 => 12, state2 => 28 } );

这才是cpan上的原例

就算是原例,也有写得太晦涩了的。
{ state1 => 10, state2 => 28, state3=>10 } 创建一个hash的引用
@param=...  赋值到数组,即把这个引用放到$param[0]

取值可以
$param[0]->{state1}

看这个
perlreftut - Mark's very short tutorial about references
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
有些基本原则记住就好了

@xxx一定是一个array了, 给array赋值就是一个list

{ } 一定是一个 hash reference

上面的写成 @param = ( {....} ); 估计大伙都懂了。

但是Perl Hacker大部分都被Larry带坏了, 追求简捷, 整的云山雾罩的
如果实际意义是那个,这么写确实不好