【发布时间】:2015-06-07 04:25:44
【问题描述】:
我想打印我通过以下方式创建的哈希的内容:
$dataStore{"$items1"}{"$items2"}{"$items3"}{'counts'}[0] = 534;
编辑:我忘了补充说上面的变量是在 while 循环内从文件中读取的,但我把它省略了,因为根据 Data::Dumper 输出可以正常工作。
基本上,我正在创建一个以数组结尾的嵌套哈希结构。我的程序正在使用上述方法将值输入到数组的不同位置。
使用 Data::Dumper 我可以看到它工作正常。
$VAR1 = {
'items1' => {
'items2' => {
'items3' => {
'counts' => [
'534'
]
...
但是,问题是我想使用 foreach 循环打印结构。主要是因为这是我知道的唯一方法。
我的 foreach 循环看起来像这样,还没有太多格式:
foreach my $item1 (sort keys %dataStore) {
print "$item1\n";
foreach my $item2 (sort keys $dataStore{"$item1"}) {
print "%$item2\n";
foreach my $item3 (sort keys $dataStore{"$item1"}{"$item2"}) {
print "%$item3\n";
print join (', ', @{$dataStore{"$item1"}{"$item2"}{"$item3"}})
}
}
}
结果最终看起来像这样(我已将数据匿名化):
item1
item2
item3
HASH(0x2c10dc0)item3
HASH(0x2b1dc70)item3
HASH(0x295bbd8)item3
HASH(0x2c34fb8)item3
HASH(0x2cca6a0)item3
HASH(0x2ba5ef0)item3
HASH(0x28fcb58)item3
HASH(0x2cca760)item3
根据我目前所读到的内容,我认为我的问题是我错误地取消了对哈希的引用,但我不确定。它可能就像在错误的事情上调用 print 一样简单。我尝试了许多不同的方法来取消引用哈希,但我要么得到这样的结果,要么在 perl 抱怨在 foreach 循环中排序引用是“实验性的”之后截断结果。
我通过 cygwin 在 Windows 8.1 上使用 Perl v5.20.1。
谢谢。
【问题讨论】:
-
您发布的代码不会产生该输出。在
use strict下也是一个错误。你也应该use warnings。发布一个工作示例来演示您遇到的问题。 -
顺便说一句,如果字符串只是一个变量,则不需要引号。在任何地方都是如此,而不仅仅是哈希键。此外,如果键是字母数字常量,则不需要引号。
$dataStore{$items1}{$items2}{$items3}{counts}[0] = 534;每个人都有自己的喜好,但是如果您阅读其他人的代码,您可能会遇到。