【问题标题】:Hash of hashes in perlperl 中的哈希值
【发布时间】:2010-06-29 15:39:25
【问题描述】:

我正在尝试使用这样的哈希值 -

#!/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;
}

我收到表单错误

在使用“strict refs”时,不能使用字符串 ("HASH(0x16c43c)") 作为 HASH ref

当use strict 不存在时,相同的代码可以工作。谁能告诉我为什么?

【问题讨论】:

  • 使用 v5.10.1,上面的代码运行没有错误。
  • 使用 perl v.5.8.9 它也可以正常运行。
  • 它也为我运行(perl v5.10.0)。如果您告诉我们您希望您的代码做什么,我们会更容易提供帮助。
  • perl 5.8.5 没有错误;你运行的是什么版本的 Perl?
  • 请避免使用 $a 和 $b 作为变量名,因为 Perl 将它们视为特殊变量。

标签: perl


【解决方案1】:

好吧,因为我在 5.8.7 中使用 strict 进行了尝试并且它有效,所以我不禁认为您实际运行的代码在某种程度上是错误的,这不是,“它在没有严格的情况下工作”意味着它没有死。 Perl 只是让您随心所欲,并让您自己解决问题。

所以答案是

1) 代码适用于 5.8(玩具代码)

2)“它在没有严格的情况下工作”是 Perl 新手的常见说法,直到我看到一些尝试将哈希引用字符串化的代码之前,我不能说任何不同的东西。

3) 为什么它“在没有严格限制的情况下工作”是您与该模式的匹配程度、实际代码的格式错误以及 Perl 将允许您在关闭严格限制的情况下无数次射击自己的事实的组合——有时你会认为它奏效了。

4) 某些东西实际上确实可以在没有严格的情况下工作,而且它们是注定的。关闭限制 (no strict 'refs';) 意味着您有意进行随机操作。

【讨论】:

  • 好吧,事实证明问题不在于哈希。我试图将这个多级哈希绑定到一个 dbm 文件,这就是导致错误的原因。如果是多级散列,则需要 MLDBM(多级 DBM)。谢谢。
猜你喜欢
  • 2010-10-20
  • 2013-06-06
  • 1970-01-01
  • 2016-07-22
  • 2012-12-07
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多