如何使用 - >?处理多个值?

时间:2014-09-23 20:02:23

标签: perl

我是Perl的新手并对现有脚本进行了一些更改,但我不确定这是否是Perl中的正确用法。在C#中我们做的事情有所不同,下面的代码示例是否正确?

$group->{$type}{class} = 1;

我添加的代码是

 $group->{$type}{class} = 1;
 $group->{$name}{port} = 1;

这是对的吗? $ group可以指向类型和名称。我用一个示例Perl脚本尝试了这个,它似乎设置并正确返回'1'。但我不确定这是否应该如何做到这一点。

2 个答案:

答案 0 :(得分:4)

是的,这看起来是正确的。您正在构建复杂的数据结构,特别是hash of hashes(HoH)。 group哈希有两个密钥,$type$name$type子网格有一个密钥class$name子网格有一个密钥port。如果您将其倾倒或立即声明它,大致看起来像这样:

$group = {
  $type => {
    class => 1
  },
  $name => {
    port => 1
  }
}

当然,$type$name会根据他们设置的内容进行评估。它不会在散列中存储引用。

答案 1 :(得分:2)

嗯......这是perl。如果它有效,那是对的。但是,对你的问题。在您的代码中$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
}