2010-06-29 173 views
1

哈希我想使用哈希像这样的哈希 -哈希在Perl

#!/usr/bin/perl -w 
use strict; 

my %hash =(); 

sub hash_populate 
{ 
    my $name = "PQR,ABD,XYZ"; 
    my @parts = split(/,/,$name); 
    my $i = $parts[0]; 
    my $a= $parts[1]; 
    my $b = $parts[2]; 

    $hash{$i} = {"A" =>$a,"B" => $b}; 
    my $c = $hash{$i}{"A"}; 
    print $c; 
} 

我得到以下形式的错误

Can't use string ("HASH(0x16c43c)") as a HASH ref while "strict refs" in use

相同的代码工作时use strict不存在。有人能告诉我为什么吗?

+3

随着v5.10.1,上面的代码运行没有错误。 – 2010-06-29 15:51:04

+1

@diyars:请显示您如何调用'hash_populate'以及错误的行号。 – toolic 2010-06-29 15:57:12

+1

使用perl v.5.8.9它也运行没有错误。 – GorillaPatch 2010-06-29 15:59:11

回答

1

好吧,因为我在严格的5.8.7版本中试过这个,所以我不禁想到你实际运行的代码在某种程度上是畸形的,而这不是“没有严格的工作”,这意味着它并没有死亡。 Perl只是让你做任何你想做的事情,并让你自己去解决问题。

所以答案是

1)代码工作(玩具代码)为5.8

2)“它的工作不严谨”是Perl的新手之间的共同声明中,直到我可以看到一些试图对一个哈希引用进行字符串化的代码我不能说任何不同的东西。

3)为什么它“没有严格的工作”是你适合那种模式的多少,实际代码是如何变形的以及Perl允许你在严格转身的情况下无数次拍摄自己的事实的组合关 - 有时你会认为它有效。

4)事情其实没有严格的工作,他们的意思是。这是关闭限制(no strict 'refs';)是为了您特意做一个快速操作的方式。

+0

嗯,事实证明,问题不在于散列。我正试图将这个多级散列绑定到一个dbm文件,这就是导致错误的原因。在多级散列的情况下,需要MLDBM(多级DBM)。谢谢。 – user379151 2010-07-15 19:22:48