我是Perl的新手并对现有脚本进行了一些更改,但我不确定这是否是Perl中的正确用法。在C#中我们做的事情有所不同,下面的代码示例是否正确?
$group->{$type}{class} = 1;
我添加的代码是
$group->{$type}{class} = 1;
$group->{$name}{port} = 1;
这是对的吗? $ group可以指向类型和名称。我用一个示例Perl脚本尝试了这个,它似乎设置并正确返回'1'。但我不确定这是否应该如何做到这一点。
答案 0 :(得分:4)
是的,这看起来是正确的。您正在构建复杂的数据结构,特别是hash of hashes(HoH)。 group
哈希有两个密钥,$type
和$name
。 $type
子网格有一个密钥class
。 $name
子网格有一个密钥port
。如果您将其倾倒或立即声明它,大致看起来像这样:
$group = {
$type => {
class => 1
},
$name => {
port => 1
}
}
当然,$type
和$name
会根据他们设置的内容进行评估。它不会在散列中存储引用。
答案 1 :(得分:2)
$group
是对哈希的引用(可能在c#中称为dictionary
)。我想你可能正在寻找这个:
my $group={}; # make the ref
my @types = ('hot','cold','warm'); # make some types
my @names = ('sink','bath','drain'); # and some names
foreach my $type (@types){
$group->{'type'}->{$type}++; # add a new $type to the "type" sub hash
}
foreach my $name (@names){
$group->{'name'}->{$name}++; # add a new $nameto the "name" sub hash
}
现在循环浏览类型,例如:
foreach my $typeKey (keys %{$group->{'type'}}){
print "type is " . $typeKey; # this is from the @types array
print ", value = " . $group->{'type'}->{$typeKey}; # this would be 1
}