Hash中的数组怎么提取?

Hash中的数组怎么提取?

一个hash打印出来以后是这样的:
          'a' => {

                           'b' => [

                                        {
                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'kervin@hotmail.com',
                                          'name' => 'Kervin'

                                        },
                                        {

                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'vann@hotmail.com',
                                          'name' => 'Vann'
                                        }
                                      ],

                           '/order' => [

                                         'Contact',

                                         'Contact',

                                         'Contact'

                                       ],
                                 }

请问高手,怎么可以print出所有的mail和name啊?在hash的array不知道怎么处理。谢谢。
好复杂的数据结构啊。
print $a->{a}->{b}->[0]->{name};

还要所有的name和email?
map { $_->{name} => $_->{email} } @{$a->{a}->{b}}
谢谢,一会儿去试试。

还有,如果判断b下面是hash还是array呢?因为表结构是动态的。。。


QUOTE:
原帖由 water111 于 2008-10-30 16:50 发表
谢谢,一会儿去试试。

还有,如果判断b下面是hash还是array呢?因为表结构是动态的。。。



[Copy to clipboard] [ - ]
CODE:
if($ref =~ /HASH/){
        print "ref-hash";
}elsif($ref =~ /ARRAY/){
        print "ref-array";
}

谢谢。

我试过的,不过因为整个hash已经被bless过,所以ref之后返回的值全部都是那个包的名字。不能返HASH或者ARRAY.


QUOTE:
原帖由 water111 于 2008-10-30 17:12 发表
谢谢。

我试过的,不过因为整个hash已经被bless过,所以ref之后返回的值全部都是那个包的名字。不能返HASH或者ARRAY.

引用就是个地址值 怎么可能是包名


[Copy to clipboard] [ - ]
CODE:
$ref = {'b' => [

                                        {
                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'kervin@hotmail.com',
                                          'name' => 'Kervin'

                                        },
                                        {

                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'vann@hotmail.com',
                                          'name' => 'Vann'
                                        }
                                      ],

                           '/order' => [

                                         'Contact',

                                         'Contact',

                                         'Contact'

                                       ],
                                 };

print $ref,"\n";

if($ref->{b} =~ /HASH/){
        print "ref-hash";
}elsif($ref->{b} =~ /ARRAY/){
        print "ref-array";
}

输出结果:

[Copy to clipboard] [ - ]
CODE:
HASH(0x182f868)
ref-array

太感谢你的回复了

$VAR1 = bless( do{\(my $o = bless( {
          'a' => {
                           'b' => [
                                        {
                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'kervin@hotmail.com',
                                          'name' => 'Kervin'
                                        },
                                        {
                                          '/order' => [
                                                        'name',
                                                        'email'
                                                      ],
                                          'email' => 'vann@hotmail.com',
                                          'name' => 'Vann'
                                        }
                                      ],
                           '/order' => [
                                         'Contact',
                                         'Contact'
                                       ],
                                 }
                           }


这是那个hash的一部分.因为被bless过,所以return的结果是不是ARRAY......
要是真是这样的话,赶快回去改设计方案吧。设计成这样以后会有无穷无尽的麻烦。

1. 不要在类的new方法以外bless任何对象
2. 只bless hash,不要bless array
——你bless一个array有什么意义呢?

3. 数据结构做成固定的。好好考虑一下,一定有办法。


如果是修改现有的系统,它的数据结构是这样的,
那应该尽量朝着规范、简明的方向去努力,
而不应当让数据结构更混乱。
谢谢。

看来我改变方法了。