批处理之家's Archiver

Mekel 发表于 2018-11-16 12:35

Perl散列的数组问题,比较绕

[code]@AoH = (
{
        husband => "barney",
        wife    => "betty",
        son    => "bamm bamm",  
},
{
        husband => "george",
        wife    => "jane",
        son    => "elroy",
},
{
        husband => "homer",
        wife    => "marge",
        son    => "bart",
},
);
for (@AoH)
{
    print $$_{husband}."--------/n";
    }
    for $i ( 0 .. $#AoH ) {
        print "$i is { ";
                for $role ( keys %{ $AoH[$i] } ) {
                        print "$role=$AoH[$i]{$role} ";
                }
                print "}/n";
}
print $AoH[0]{husband}."!!\n";[/code]问题来了,$AOH[0]{husband}前为什么不用加$,如果不用加,为什么keys %{ $AoH[$i] }加%,感觉矛盾啊

523066680 发表于 2018-11-16 12:47

[i=s] 本帖最后由 523066680 于 2018-11-16 13:03 编辑 [/i]

你上一个问题什么情况了?别人回答后也不响应问题是否得到解决。

还有你这个帖子,
print $AOH[0]{husband}."!!\n";
AOH 应该改成 AoH

印象中是因为多层镶嵌直接表达的时候可以不加,比如 $a{b}{c} 或者 $a[1]{name}
间接使用的时候就必须加,比如
my $ref = $AoH[0];
printf $ref{husband}; 是无效的,需要使用 $ref->{husband} 或者 $$ref{husband}

但是为了方便记忆,建议在有引用的情况下统一加 $ 或者 ->

$AoH[0]->{husband}
${$AoH[0]}{husband}

Mekel 发表于 2018-11-16 13:14

[i=s] 本帖最后由 Mekel 于 2018-11-16 13:33 编辑 [/i]

明白了,但是keys %{ $AoH[$i] }为什么还要加%,$AoH[$i]本身不是已经代表散列了吗
上个问题参数是能够完美传递的,即使不加our,因为我原函数里有$a=shift这样的语句,写pm里就要写成$a=shift @ARGV才行

Mekel 发表于 2018-11-16 14:17

恩,$AoH[$i]存储的是匿名哈希的引用,不是哈希,所以加%

sxw 发表于 2018-11-16 22:42

老哥,学 Perl 6 就不会这么绕了

523066680 发表于 2018-11-17 08:29

[i=s] 本帖最后由 523066680 于 2018-11-17 08:34 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=214972&ptid=51322]5#[/url] [i]sxw[/i] [/b]

Perl 6 很成熟了吗?各种强大的模块不知道推出 perl6 版本没有
暂时不打算转。

sxw 发表于 2018-11-18 09:55

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=214982&ptid=51322]6#[/url] [i]523066680[/i] [/b]


    现在也就 1000 左右的模块

523066680 发表于 2018-11-18 11:22

[i=s] 本帖最后由 523066680 于 2018-11-18 11:26 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=215032&ptid=51322]7#[/url] [i]sxw[/i] [/b]

     保持观望。

Mekel 发表于 2018-11-19 09:08

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=214972&ptid=51322]5#[/url] [i]sxw[/i] [/b]


    perl6也再用,有些很方便,但是不顺手

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.