如何在Perl中创建哈希值的哈希值?

yfwxisqw  于 2022-11-15  发布在  Perl
关注(0)|答案(6)|浏览(177)

根据我目前对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}";

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

bhmjp9jg

bhmjp9jg1#

1.你应该总是用“用严;“在您的程序中。
1.使用引用和匿名哈希。
``
`

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}创建对哈希%b`副本的引用。您需要在此处复制,因为稍后将清空它。

7vux5j2d

7vux5j2d2#

散列的散列很难在第一次就正确。

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

你想去的地方。
有关Perl中二维数据结构的详细信息,请参阅perldoc perllol

hgb9j2n6

hgb9j2n63#

简短回答:散列键只能与标量相关联,而不能与散列相关联。要实现此目的,需要使用引用。
我建议您阅读perlreftut,而不是重新散列(heh)如何创建多级数据结构。perlref更完整,但一开始有点让人不知所措。

ogq8wdun

ogq8wdun4#

迈克, Alexandria 的答案是正确的。
还有一个提示,如果你只是学习哈希,perl有一个叫做Data::Dumper的模块,它可以很好地打印你的数据结构,当你想检查你的数据结构有什么值的时候,它真的很方便。

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

当你打印这个的时候

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

h22fl7wq5#

Perl喜欢扁平化你的数据结构,这通常是一件好事......例如,(@options, "another option", "yet another")最终会变成一个列表。
如果你真的想让一个结构在另一个结构内部,那么内部的结构需要是一个引用。

%a{1} = { %b };

大括号表示一个哈希值,您将使用%b中的值填充它,并将其作为引用而不是直接哈希值返回。
你也可以说

$a{1} = \%b;

但这会使对%b的更改也更改$a{1}。

eh57zj3b

eh57zj3b6#

我需要创建1000个员工记录来测试T&A系统。员工记录存储在一个哈希表中,其中的键是员工的身份证号,值是他们的姓名、出生日期和聘用日期等的哈希值。下面是如何...

# declare an empty hash
%employees = ();

# add each employee to the hash
$employees{$identity} = {gender=>$gender, forename=>$forename, surname=>$surname, dob=>$dob, doh=>$doh};

# dump the hash as CSV
foreach $identity ( keys %employees ){
    print "$identity,$employees{$identity}{forename},$employees{$identity}{surname}\n";
}

相关问题