perl - perl中散列的散列问题

我在访问哈希的哈希中的变量时遇到问题我不知道我做错了什么。在调试 hash %list1 的值时给出一个 undef,所以我无法得到我的值。

use strict ;
use warnings ;
my $text = "The, big, fat, little, bastards";
my $Author = "Alex , Shuman ,Directory";
my %hashes  = {1,2,3,40};
my %count  = ();
my @lst = split(",",$text);
my $i = 0 ;
my @Authors  =  split(",", $Author);
foreach  my $SingleAuthor(@Authors)
{
    foreach my $dig (@lst)
    {

     $count{$SingleAuthor}{$dig}++;
    }
}

counter(\%count);

sub counter
{
    my $ref  =  shift;
    my @SingleAuthors = keys %$ref;
    my %list1;
    foreach  my $SingleAuthor1(@SingleAuthors)
  {   
   %list1 =  $ref->{$SingleAuthor1};
    foreach my $dig1 (keys %list1)
    {

     print  $ref->{$SingleAuthor1}->{$dig1};
    }
}


}

最佳答案

在两个地方,您试图将散列引用分配给散列,这会导致出现此警告:在需要偶数大小列表的地方找到了引用

这里有两个你需要的编辑:

# I changed {} to ().
# However, you never use %hashes, so I'm not sure why it's here at all.
my %hashes  = (1,2,3,40);

# I added %{} around the right-hand side.
%list1 =  %{$ref->{$SingleAuthor1}};

参见 perlreftut用于对复杂数据结构进行有用且简短的讨论。

就其值(value)而言,您的 counter() 方法可以通过删除中间变量而在不损失可读性的情况下得到简化。

sub counter {
    my $tallies = shift;
    foreach my $author (keys %$tallies) {   
        foreach my $dig (keys %{$tallies->{$author}}) {
            print $tallies->{$author}{$dig}, "\n";
        }
    }
}

或者,正如 ysth 指出的那样,如果您不需要 key ,则像这样:

    foreach my $author_digs (values %$tallies) {   
        print $dig, "\n" for values %$author_digs;
    }

https://stackoverflow.com/questions/6557452/

相关文章:

java - 为什么我们不能将实例变量传递给父类(super class)构造函数?

php - 使用php获取字符串的一部分

css - float : left; Not working in IE?

php - 需要 return ($a > $b) 的解释吗? -1 : 1 in php

iphone - UITableView 中图像的圆角矩形/圆角

oracle - 在 Oracle 中使用索引反转字符串

jquery - 你如何使用 jquery 将一个下拉列表的选项复制到另一个下拉列表

php - 如何在 PHP 中设置环境变量?

winforms - 使用 Windows 窗体创建棋盘

visual-studio - Visual Studio : Debugging Chrome w