如何在Perl中创建哈希散列?

时间:2010-05-25 21:23:06

标签: perl hash perl-data-structures

基于我目前对Perl中哈希的理解,我希望这段代码可以打印出“hello world”。它没有打印任何东西。

%a=();

%b=();
$b{str} = "hello";  
$a{1}=%b;

$b=();
$b{str} = "world";
$a{2}=%b;

print "$a{1}{str}  $a{2}{str}"; 

我假设散列就像一个数组,为什么我不能让散列包含另一个?

5 个答案:

答案 0 :(得分:6)

  1. 你应该总是使用“use strict;”在你的程序中。

  2. 使用引用和匿名哈希。

  3. use strict;use warnings;
    my %a;
    
    my %b;
    $b{str} = "hello";  
    $a{1}={%b};
    
    %b=();
    $b{str} = "world";
    $a{2}={%b};
    
    print "$a{1}{str}  $a{2}{str}";
    

    use strict;use warnings; my %a; my %b; $b{str} = "hello"; $a{1}={%b}; %b=(); $b{str} = "world"; $a{2}={%b}; print "$a{1}{str} $a{2}{str}";

    创建对哈希{%b}副本的引用。你需要在这里复制,因为你以后要把它清空。

答案 1 :(得分:6)

哈希的哈希很难在第一时间变得正确。在这种情况下

$a{1} = { %b };
...
$a{2} = { %b };

会让你到达目的地。

有关Perl中二维数据结构的详细信息,请参阅perldoc perllol

答案 2 :(得分:4)

简答:散列键只能与标量相关联,而不能与散列相关联。要做你想做的事,你需要使用引用。

我建议你阅读perlreftut,而不是重新哈希(嘿)如何创建多级数据结构。 perlref更完整,但一开始有点压倒性。

答案 3 :(得分:2)

迈克,亚历山大是正确的答案。

也是小费。如果您只是学习哈希perl有一个名为Data :: Dumper的模块,它可以为您打印出数据结构,当您想要检查数据结构的值时,这非常方便。

use Data::Dumper;
print Dumper(\%a); 

当你打印它时显示

$VAR1 = {
          '1' => {
                   'str' => 'hello'
                 },
          '2' => {
                   'str' => 'world'
                 }
        };

答案 4 :(得分:1)

Perl喜欢扁平化您的数据结构。这通常是一件好事......例如,(@options, "another option", "yet another")最终成为一个列表。

如果你的意思是在另一个结构中有一个结构,那么内部结构需要作为参考。像这样:

%a{1} = { %b };  

大括号表示一个哈希值,你用%b中的值填充,然后返回作为引用而不是直接哈希。

你也可以说

$a{1} = \%b;   

但是,对%b进行更改也会改变$ a {1}。