关于hash的一个数组类型遍历

关于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里面的键值对??
这个例子里的 my @params .
这个例子里的 my @params = { state1 => 10, state2 => 28, state3=>10 }; 虽然合法,但不是一个好的程序员该写的 Perl 程序。容易让人混淆。 XML::RPC 哪里有这个例子,给个链接?

这里 { state1 => 10, state2 => 28, state3=>10 } 是 hash reference, 然后把这个 hash reference 存入数组 @params 作为第一个数组值。

碰到这种情况可以使用 Data::Dumper 来把数据结构打印出来

perl -MData::Dumper -e "@params = { state1 => 10, state2 => 28, state3=>10 };print Dumper \@params"

$VAR1 = [
     {
      'state1' => 10,
      'state3' => 10,
      'state2' => 28
     }
    ];


perl -e "@params = { state1 => 10, state2 => 28, state3=>10 };print $params[0]->{state1}"
10
调试OK了
十分感谢!
通过你的方法,我测试通过了,已经都成功取得了数据。

上面的例子,我是直接从 perldoc XML::RPC里面得到的。
我根据他的例子,自己写了几个测试的方法,目前已经都调试OK了。


另,想请教一下,如果做web services,使用XML::RPC好还是 SOAP::Lite好呢?
对于这2中方法,都测试可以实现相应的功能。
再次感谢!

NAME
    XML::RPC -- Pure Perl implementation for an XML-RPC client and server.

SYNOPSIS
    make a call to an XML-RPC server:

      use XML::RPC;

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

    create an XML-RPC service:

      use XML::RPC;
      use CGI;

      my $q   = new CGI;
      my $xmlrpc = XML::RPC->new();
      my $xml  = $q->param('POSTDATA');

      print $q->header( -type => 'text/xml', -charset => 'UTF-8' );
      print $xmlrpc->receive( $xml, \&handler );

      sub handler {
        my ( $methodname, @params ) = @_;
        return { you_called => $methodname, with_params => \@params };
      }

DESCRIPTION
    XML::RPC module provides simple Pure Perl methods for XML-RPC communi-
    cation. It's goals are simplicity and flexibility. XML::RPC uses
    XML::TreePP for parsing.

看了一下 xml::rpc 的源码.
看了一下 xml::rpc 的源码,@params 既可以是 hash 也可以是 数组,分类处理。够让人费解。

对 perl 做 web service 没有什么接触,是你的话我会在网上搜一下,应该有些类似的资料,然后两个模块都试一下,再决定。
测试结果
经过测试,SOAP对于.NET客户端调用好像有问题。但是php等没有问题
XML::RPC,已经通过了.NET客户端调用的测试。