根据我目前对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包含另一个呢?
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`副本的引用。您需要在此处复制,因为稍后将清空它。
``
创建对哈希
7vux5j2d2#
散列的散列很难在第一次就正确。
$a{1} = { %b }; ... $a{2} = { %b };
你想去的地方。有关Perl中二维数据结构的详细信息,请参阅perldoc perllol。
perldoc perllol
hgb9j2n63#
简短回答:散列键只能与标量相关联,而不能与散列相关联。要实现此目的,需要使用引用。我建议您阅读perlreftut,而不是重新散列(heh)如何创建多级数据结构。perlref更完整,但一开始有点让人不知所措。
ogq8wdun4#
迈克, Alexandria 的答案是正确的。还有一个提示,如果你只是学习哈希,perl有一个叫做Data::Dumper的模块,它可以很好地打印你的数据结构,当你想检查你的数据结构有什么值的时候,它真的很方便。
use Data::Dumper; print Dumper(\%a);
当你打印这个的时候
$VAR1 = { '1' => { 'str' => 'hello' }, '2' => { 'str' => 'world' } };
h22fl7wq5#
Perl喜欢扁平化你的数据结构,这通常是一件好事......例如,(@options, "another option", "yet another")最终会变成一个列表。如果你真的想让一个结构在另一个结构内部,那么内部的结构需要是一个引用。
(@options, "another option", "yet another")
%a{1} = { %b };
大括号表示一个哈希值,您将使用%b中的值填充它,并将其作为引用而不是直接哈希值返回。你也可以说
$a{1} = \%b;
但这会使对%b的更改也更改$a{1}。
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"; }
6条答案
按热度按时间bhmjp9jg1#
1.你应该总是用“用严;“在您的程序中。
1.使用引用和匿名哈希。
``
`
``
{%b}创建对哈希
%b`副本的引用。您需要在此处复制,因为稍后将清空它。7vux5j2d2#
散列的散列很难在第一次就正确。
你想去的地方。
有关Perl中二维数据结构的详细信息,请参阅
perldoc perllol
。hgb9j2n63#
简短回答:散列键只能与标量相关联,而不能与散列相关联。要实现此目的,需要使用引用。
我建议您阅读perlreftut,而不是重新散列(heh)如何创建多级数据结构。perlref更完整,但一开始有点让人不知所措。
ogq8wdun4#
迈克, Alexandria 的答案是正确的。
还有一个提示,如果你只是学习哈希,perl有一个叫做Data::Dumper的模块,它可以很好地打印你的数据结构,当你想检查你的数据结构有什么值的时候,它真的很方便。
当你打印这个的时候
h22fl7wq5#
Perl喜欢扁平化你的数据结构,这通常是一件好事......例如,
(@options, "another option", "yet another")
最终会变成一个列表。如果你真的想让一个结构在另一个结构内部,那么内部的结构需要是一个引用。
大括号表示一个哈希值,您将使用%b中的值填充它,并将其作为引用而不是直接哈希值返回。
你也可以说
但这会使对%b的更改也更改$a{1}。
eh57zj3b6#
我需要创建1000个员工记录来测试T&A系统。员工记录存储在一个哈希表中,其中的键是员工的身份证号,值是他们的姓名、出生日期和聘用日期等的哈希值。下面是如何...