在for循环中赋值后访问时哈希变量出错

时间:2014-06-04 09:58:50

标签: perl hash

我有一个在for循环之外定义的哈希变量说

my %sports = (); #hash variable defined
my $count = 0; #key for the hash variable which will be used to populate the hash 

在for循环中,我通过一些逻辑说明

填充了这个变量
$sports{$count} = "cricket"
$count++;

现在当我尝试在循环外打印映射到此哈希变量的所有值时,我收到错误

我进入了

print $count." -->  ".$sports{$count}  ; 

我收到错误

  

在连接(。)或中使用%sports中的未初始化值   

的字符串

4 个答案:

答案 0 :(得分:1)

而不是,

$sports{$count} = "cricket"
$count++;

尝试

$count++;
$sports{$count} = "cricket"

因此,$count将保留%sports哈希的最后一次使用密钥。

答案 1 :(得分:0)

在最后一次分配后,您增加了$ count的值。因此,%sports散列中不存在新值。使用

print $count - 1, ' -->  ', $sports{ $count - 1 };

此外,如果您使用一系列数字作为哈希键,则可以切换到数组。

答案 2 :(得分:0)

要打印映射到散列的所有值,请遍历键:

for my $count (keys %sports) {
    print $count." -->  ".$sports{$count};
}

答案 3 :(得分:0)

错误是因为您正在尝试访问未分配的哈希值。

您的迭代就像这样

$count = 0

# Lets say loop goes from 0 to 5.
# So, when $count = 5 
    $sports{$count} = "cricket"
    $count++;  # Here $count becomes 6 and loop ends

print $sports{$count}  # Outside loop, Here $count is still 6, you are
                       # trying to print $sports{6}, which is unassigned

您需要先移动$count++

$count++;
$sports{$count} = "cricket"